2016-08-17 16 views
0

これはthisへのフォローアップの質問です。 OPが固定されている2つの列x1x2上のブートストラップを実行したい元の質問には:スケーラブルな方法でdata.tableの複数の列をブートストラップするR

set.seed(1000) 
data <- as.data.table(list(x1 = runif(200), x2 = runif(200), group = runif(200)>0.5)) 
stat <- function(x, i) {x[i, c(m1 = mean(x1), m2 = mean(x2))]} 
data[, list(list(boot(.SD, stat, R = 10))), by = group]$V1 

しかし、私はこの問題はうまくグループとしてそれらを処理することにより、任意の数の列を処理するために拡張することができると思います。たとえば、irisデータセットを使用できます。各種の4次元すべてのブートストラップ平均を計算したいとします。私は溶融を使用してデータを反転してから、Speciesvariableの組み合わせを使用して平均を得ることができます。このアプローチはうまくスケールされると思います。

data(iris) 
iris = data.table(iris) 
iris[,mean(Sepal.Length),by=Species] 
iris[,ID:=.N,] 
iris_deep = melt(iris 
       ,id.vars = c("ID","Species") 
       ,measure.vars = c("Sepal.Length","Sepal.Width","Petal.Length","Petal.Width")) 
#define a mean bootstrap function 
stat <- function(x, i) {x[i, m=mean(value),]} 
iris_deep[, list(list(boot(.SD, stat, R = 100))), by = list(Species,variable)]$V1 

これは私の試みです。しかし、ブートストラップ部分は機能していないようです。 Rが次のエラーをスローするとき:

Error in mean(value) : object 'value' not found 

誰かがこの問題を解くことができますか?

答えて

1

私は(追加中括弧はm=mean(value)を囲んで)これを試してみましたが、動作するように表示されます。

stat <- function(x, i) {x[i, (m=mean(value))]} 
関連する問題