3

列ごとに関数を実行したい行列 (origmatrix) があります。この関数の結果を別の行列 (newmatrix) に入れたいと思います。この行の行番号は、元の行列の列番号に対応しています。実際のデータセットには複雑な関数を含む 20000 行があるため、プロジェクトを並列化できるようにするために適用タイプを使用したいと考えています。apply into newmatrix 内からデータを取得する方法はありますか? どんな助けでも大歓迎です!

origmatrix = matrix(1:50, 10, 5)
colnames(origmatrix) = letters[1:5]
newmatrix = matrix(0, 5,2)
colnames(newmatrix) = c("Identifier","mean")

boertje = function (x){
  newlist[which(colnames(origmatrix)==x),2]= mean(origmatrix[,x])
}
sapply(colnames(origmatrix), boertje)
4

1 に答える 1

5

またはプラットフォームに依存するのマルチコア バージョンを使用してlapply、結果からデータフレームを作成するのはどうですか? 次のように複数の値を返すと、データフレームを作成できます。parallel:::mclapplymulticore:::mclapply

require(parallel)
res <- mclapply( 1:ncol(origmatrix) , mc.cores = 1 , function(x){ c( mean( origmatrix[,x] ) , sd( origmatrix[,x] ) , var( origmatrix[,x] ) ) } )

# So the first element of the resulting list looks like
 res[[1]]
  # [1] 5.500000 3.027650 9.166667

df <- as.data.frame( res )
rownames(df) <- c("mean","sd","var")
colnames(df) <- colnames(origmatrix)
#               a         b         c         d         e
#   mean 5.500000 15.500000 25.500000 35.500000 45.500000
#   sd   3.027650  3.027650  3.027650  3.027650  3.027650
#   var  9.166667  9.166667  9.166667  9.166667  9.166667

mclapplyただし、ヘルプページにこの警告が表示されます...

警告
GUI または組み込み環境でこれらの関数を使用することは強く推奨されません。同じ GUI を共有する複数のプロセスが発生し、おそらく混乱 (およびクラッシュ) が発生する可能性があるためです。子プロセスは、オンスクリーン グラフィック デバイスを使用しないでください。

于 2013-04-16T14:27:44.577 に答える