[问题] list 元素加总,如何不用loop做到

楼主: a78998042a (Benjimine)   2015-01-15 16:17:18
[问题类型]:
程式咨询(我想用R 做某件事情,但是我不知道要怎么用R 写出来)
[软件熟悉度]:
入门(写过其他程式,只是对语法不熟悉)
[问题叙述]
想使用apply类型的函数将list内的元素加总,而不使用for loop
[程式范例]:
mat=matrix(1:4,2,2)
mat.list=list(mat,mat,mat)
想加总成单一的矩阵
结构为:matrix(c(3,6,9,12),2,2)
有人知道不用loop的情况可以怎么做吗?
谢谢
作者: koai (可笑的自以为...)   2015-01-15 16:18:00
试试看 ?sapply
作者: obarisk (OSWALT)   2015-01-15 17:38:00
do.call
作者: celestialgod (天)   2015-01-15 18:14:00
apply(mat. list, 1:2, sum)Reduce也可以,只是do.call最有效率
作者: raysonic   2015-01-15 18:44:00
Reduce('+' , mat.list)
作者: obarisk (OSWALT)   2015-01-15 21:49:00
do.call好像不能用`+`,还是先用Reduce吧Orz要指定`+`.__C__matrix,但是这个我试不出来
作者: memphis (让你喜欢这世界~)   2015-01-15 22:07:00
如果list中的matrix大小一样 建议你这样做matrix(rowSums(matrix(unlist(mat.list), nrow=4)), nrow=2)
楼主: a78998042a (Benjimine)   2015-01-16 02:46:00
谢谢!!!学习了
作者: clickhere (It's time to go home.)   2015-01-16 05:48:00
do.call(.Primitive("+"), mat.list)
作者: obarisk (OSWALT)   2015-01-16 09:26:00
apply和 for的效能应该没差多少for 要用 compiler,不过我太晓得目前jit的情况如果要超过小时的code,还是推RCpp吧
作者: yanchenglin (LIN)   2015-01-16 18:47:00
推Rcpp, RcppArmadillo.还有若是你每次循环或是模拟都是独立的,平行运算也很快.Rcpp+平行运算直接逆天!!简单说,模拟K次,K次间都独立,可以分散到N个CPU平行~~
作者: Edster (Edster)   2015-01-17 15:31:00
为什么不用array?mat.array = array(mat, 1:3) # 可能是吧, 随意写.sum(mat.array[,,1:3])你的每个list维度都一样, 用array比较简单吧.
作者: celestialgod (天)   2015-01-17 19:44:00
我回错了...apply那个只能用到3维阵列...

Links booklink

Contact Us: admin [ a t ] ucptt.com