2016-07-13 40 views
1

我在全局环境中有一个向量,我想创建一个函数,只修改该向量的一个元素。问题在于矢量太大,标准方法计算时间过长。看到我已有的功能,它们都太慢了。在函数中更改全局向量的元素

x <- rep(0, 1e8) 
f1 <- function(n,a) { 
    x <- x  # loads the vector to current environment 
    x[n] <- a # changes the position in current environment 
    x <<- x  # saves the vector to global environment 
} 
f2 <- function(n,a) { 
    x[n] <<- a # changes the vector element in global environment 
} 

system.time(f1(1,1)) # 0.34 
system.time(f2(2,1)) # 0.30 
system.time(x[3] <- 1) # 0.00 

我期待这样的事情:

assign('x[4]', 1, .GlobalEnv) 
+0

有什么不对第三命令检索x作为载体? – Jimbou

+0

@Jimbou我需要在函数内部有命令 –

回答

1

对我来说,因为它通过引用操纵对象,你可以用data.table包解决这个问题。

例如:

library(data.table) 
data <- data.table(x=rep(0, 1e8)) 

f3 <- function(n,a){ 
    data[n,x:=a] 
    return(TRUE) 
} 

system.time(f3(2,1)) # 0 
print(data) 
x 
1: 0 
2: 1 
3: 0 
4: 0 
... 

您可以随时与data[["x"]]

+0

正是我在找的东西。谢谢 –