Я создал функцию «mywsobj», который принимает один входной & 2 Выхода входногокак обеспечить вывод определенного пользователя-функции, как data.frame в R в .GlobalEnv
пользователя: окружающая среда
output1 : имя data.frame "wsobj" (данные списка объектов, их классы, использование их памяти) вывод на консоль output2: штрих-лист списка объектов и использование их памяти.
До сих пор все нормально,
Мой Question1: Но как сохранить эту «wsobj» data.frame внутри функции в том, что указанный пользователем входной среды или, по крайней мере, в .GlobalEnv? Я пробовал читать такие вещи, как: использование < <, использование pos/parent.environment и т. Д. , но все так далеко от меня.
Мой вопрос2: Можно ли указать специфичную для проекта/пользовательскую спецификацию в R/специально на сервере Rstudio?
Хотя мой код здесь не имеет значения еще ниже:
# creating SOME data
dfAtoZ<- data.frame(LETTERS)
df1to1Cr <- data.frame(1:10000000)
vec1to1Cr <- as.vector(1:10000000)
mat1to1Cr <- as.matrix(1:10000000)
set.seed<-10
randvec<-runif(1000,min=-100,max=100)
# creating MY function
mywsobj<-function(myenvironmentName)
{#step1 creating vector of object names
wslist <- vector(length=length(ls(myenvironmentName)))
for(i in 1:length(ls(myenvironmentName)))
{wslist[i]<-ls(myenvironmentName)[i]}
# wslist<-cbind(unlist(ls()))
#step2 creating vector of object classes
wsclass <- vector(length=length(wslist))
wsmemKb <- vector(mode="numeric",length=length(wslist))
for(i in 1:length(wslist))
{wsclass[i]<-class(get(wslist[i]))
wsmemKb[i]<- object.size(get(wslist[i]))/1000*1024}
#step4 combining them in a data.frame
wobj<-data.frame(cbind(wslist,wsclass,wsmemKb))
# library(sqldf)
# sqldf("pragma table_info(wobj)") shows col 3(wsmem) still non-numeric
wobj[,3] <- as.numeric(as.character(wobj[,3]))
# create data to return matrix of memory consumption
objmemsize <- rev(sort(sapply(ls(envir=myenvironmentName),
function (object.name)object.size(get(object.name))/1000)))
# draw bar plot
barplot(objmemsize,main="Memory usage by object in myenvironment",
ylab="KiloByte", xlab="Variable name",
col=heat.colors(length(objmemsize)))
# result <- sqldf("select * from wobj order by 1/wsmemKb")
return(wobj)
# return(data.frame(myenvironmentName,wobj))
# return(assign("myname",wobj,envir = .GlobalEnv))
# attach(wobj,pos=2,"wobj")
return(barplot)
}
# use of mywsobj function
mywsobj(.GlobalEnv)
# saving output of mywsobj function
output<-as.data.frame(mywsobj(.GlobalEnv))
Примечание это будет проблемой, если вы делаете это в пакете вы надеетесь представить CRAN, из-за этой политики: «Пакеты не должен изменять глобальную среду (рабочее пространство пользователя). " –
Очень благодарен за этот указатель, мой следующий план заключается в том, могу ли я генерировать системное (ОС) предупреждение для пользователя, если использование памяти выходит за пределы заданного предела, допустимо ли это? – pmr
Почему вы хотите сохранить объект в пользовательской среде? Это вообще плохой дизайн. – hadley