Xiz*_*zam 3 r global-variables apply
我有一个矩阵(origmatrix),我想在每个列上执行一个函数.我想将此函数的结果放入另一个矩阵(newmatrix),该行的行号对应于原始矩阵中的列号.在真实数据集中有20000行具有复杂功能,因此我想使用一种类型的应用以便能够并行化项目.有没有办法让我从申请到新矩阵中获取数据?任何帮助将不胜感激!
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)
Run Code Online (Sandbox Code Playgroud)
如何使用或取决于您的平台的多核版本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
Run Code Online (Sandbox Code Playgroud)
mclapply 虽然在帮助页面中出现了这个警告...
警告
强烈建议不要在GUI或嵌入式环境中使用这些功能,因为这会导致多个进程共享同一个GUI,这可能会导致混乱(并可能导致崩溃).子进程绝不应使用屏幕图形设备.