提供用戶定義的函數的輸出作爲data.frame中R I已經創建了一個函數「mywsobj」這需要一個輸入& 2輸出如何在.GlobalEnv
用戶輸入:環境
OUTPUT1 :data.frame名稱「wsobj」 (對象列表的數據,它們的類,它們的內存使用情況) 輸出到控制檯 output2:基於對象列表和它們的內存使用情況的barplot。
到目前爲止一切ok,
我的問題1:但如何從函數中保存「wsobj」 data.frame在用戶指定的輸入環境,或者至少在.GlobalEnv? 我嘗試閱讀如下東西:使用< <,使用pos/parent.environment等 但事情遠遠超出了我。
我的問題2:是否可以在Rstudio服務器的R /特別指定項目特定/用戶特定環境?
雖然我在這裏的代碼可能並不重要還是它下面是:
# 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,因爲這一政策的包做:「包不應該修改全球環境(用戶的工作區)。「 – 2013-03-17 16:06:23
非常感謝這個指針,我的下一個計劃是如果我可以爲用戶生成一個系統(OS)警報,如果內存使用超出預先指定的限制,是否允許? – pmr 2013-03-17 16:37:21
爲什麼要將對象保存在用戶的環境中?這通常是不好的設計。 – hadley 2013-03-18 01:39:43