0

R?-speed などで新しい .env にデータを配置する利点は何ですか?

時系列などのデータの場合、新しい .env はデータベースに似ていますか?

私の質問は、R で資産価格をダウンロードするところから始まります。そこでは、それらを新しい .env に配置することが提案されました。これはなぜですか?ありがとうございました:

library(TTR)

url = paste('http://www.nasdaq.com/markets/indices/nasdaq-100.aspx',sep="")
 txt = join(readLines(url)) 

 # extract tables from this pages
 temp = extract.table.from.webpage(txt, 'Symbol', hasHeader = T)
 temp[,2]

 # Symbols
 symbols = c(temp[,2])[2:101]

 currency("USD")
stock(symbols, currency = "USD", multiplier = 1)

# create new environment to store symbols
symEnv <- new.env()

# getSymbols and assign the symbols to the symEnv environment
getSymbols(symbols, from = '2002-09-01', to = '2013-10-17', env = symEnv)
4

2 に答える 2

2

データが大きく、関数を介してデータを変更する必要がある場合、これには利点があります。data.frameそれらを変更する関数にs またはs を送るvectorと、R はデータを変更する前にデータのコピーを作成します。次に、関数から変更されたデータを返し、古いデータを上書きして、変更手順を完了します。

データが大きい場合、関数呼び出しごとにデータをコピーすると、望ましくない量のオーバーヘッドが発生する可能性があります。s を使用environmentすると、このオーバーヘッドを回避できます。environments は、関数によって異なる方法で処理されます。関数にを渡しenvironmentて内容を変更すると、R はenvironmentコピーを作成せずに を直接操作します。したがって、データを直接渡すのではなく、データを に入れ、 を関数に渡すことで、大きなデータセットのコピーを避けることができますenvironmentenvironment

# here I create a data.frame inside an environment and pass the environment
# to a function that modifies the data.
e <- new.env()
e$k <- data.frame(a=1:3)
f <- function(e) {e$k[1,1] <- 10}
f(e)
# you can see that the original data was changed.
e$k
   a
1 10
2  2
3  3

# alternatively, if I pass just the data.frame, the manipulations do not affect the 
# original data.
k <- data.frame(a=1:3)
f2 <- function(k) {k[1,1] <- 10}
f2(k)
k
  a
1 1
2 2
3 3
于 2013-11-04T16:24:59.370 に答える