在函数中更改全局向量的元素
Change an element of global vector in a function
我在全局环境中有一个向量,我想创建一个只修改该向量的一个元素的函数。问题是向量太大,标准方法计算时间太长。看看我已经有的功能,两个都太慢了
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)
对我来说,您可以使用 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"]]
检索 x
作为矢量
我在全局环境中有一个向量,我想创建一个只修改该向量的一个元素的函数。问题是向量太大,标准方法计算时间太长。看看我已经有的功能,两个都太慢了
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)
对我来说,您可以使用 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"]]
x
作为矢量