我有一个看起来像这样的函数:
sampleFcn <- function(c1, c2) {
chars <- get('chars', envir=.GlobalEnv)
if (c1 %in% chars) {
array[c1,1] <<- array[c1,1] + 1
if (c2 %in% chars) bigM[c1,c2] <<- bigM[c1,c2] + 1
}
}
这将应用于大型数据集。就像现在一样,它起作用但是需要很长时间才能应用,我猜这主要是因为第二行,我不断分配给一个新的变量,一个大的矢量(字符)。我的问题是,我如何调用全局变量&#39; chars&#39;无需经常使用新内存来分配“&get;#39;功能
答案 0 :(得分:1)
我会重新考虑您对代码效率低下的假设:
library(pryr)
x <- matrix(1:1e6,10)
> object_size(x)
4 MB
track_x <- track_copy(x)
foo <- function(){
r1 <- mem_change(s <- get("x",.GlobalEnv))
r2 <- mem_change(2 %in% s)
list(r1,r2)
}
> foo() #No noticeable memory use
[[1]]
14 kB
[[2]]
1.74 kB
> track_x()
# Nothing changed
> mem_changed(x[1,1] <- x[1,1]+1)
4MB #Increased by 4MB
> track_x()
x copied #Because it copied