强制申请返回列表

mos*_*aic 13 r

我有一个矩阵和一个函数,它接受一个向量并返回一个矩阵.我想将函数应用于矩阵的所有行并将所有结果一起rbind.例如

mat <- matrix(1:6, ncol=2)
f <- function (x) cbind(1:sum(x), sum(x):1)
do.call(rbind, apply(mat, 1, f))
Run Code Online (Sandbox Code Playgroud)

这很有效,因为返回的矩阵具有不同的行数,因此apply返回一个列表.但是,如果他们碰巧有相同数量的行,那么它就不再起作用了:

mat <- f(3)
apply(mat, 1, f)
Run Code Online (Sandbox Code Playgroud)

apply返回一个矩阵,我无法得到我想要的结果.是否可以强制申请返回列表或是否有其他解决方案?

Sac*_*amp 18

这就是我喜欢这个plyr包的原因.它有许多--ply功能都以相同的方式工作.第一个字母对应于您输入的内容,第二个方法对应于您的输出(l对于列表,a对于数组,d对于数据帧).

所以该alply()函数的工作方式类似apply()但始终返回一个列表:

alply(mat, 1, f)
Run Code Online (Sandbox Code Playgroud)


Woj*_*ala 14

在应用函数f之前,您必须拆分矩阵垫.

list_result <- lapply(split(mat,seq(NROW(mat))),f)
matrix_result <- do.call(rbind,list_result)
Run Code Online (Sandbox Code Playgroud)