2016-07-13 7 views
1

グローバル環境内にベクトルがあり、そのベクトルの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 

私はこのような何かを探しています:それは、参照することにより、オブジェクトを操作すると、あなたがdata.tableパッケージでこの問題に対処することができ、私にとって

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

でいつでもベクトルとしてxを取得することができますか? – Jimbou

+0

@ジンボウ私は関数内でコマンドを持っている必要があります –

答えて

1

。例えば

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 
... 

あなたは3番目のコマンドと間違って何data[["x"]]

+0

まさに私が探していたものです。ありがとう –

関連する問題