我有一个矩阵和一个函数,它接受一个向量并返回一个矩阵.我想将函数应用于矩阵的所有行并将所有结果一起rbind.例如
mat <- matrix(1:6, ncol=2)
f <- function (x) cbind(1:sum(x), sum(x):1)
do.call(rbind, apply(mat, 1, f))
这很有效,因为返回的矩阵具有不同的行数,因此apply返回一个列表.但是,如果他们碰巧有相同数量的行,那么它就不再起作用了:
mat <- f(3)
apply(mat, 1, f)
apply返回一个矩阵,我无法得到我想要的结果.是否可以强制申请返回列表或是否有其他解决方案?
Sac*_*amp 18
这就是我喜欢这个plyr包的原因.它有许多--ply功能都以相同的方式工作.第一个字母对应于您输入的内容,第二个方法对应于您的输出(l对于列表,a对于数组,d对于数据帧).
所以该alply()函数的工作方式类似apply()但始终返回一个列表:
alply(mat, 1, f)
Woj*_*ala 14
在应用函数f之前,您必须拆分矩阵垫.
list_result <- lapply(split(mat,seq(NROW(mat))),f)
matrix_result <- do.call(rbind,list_result)