强制申请返回列表

时间:2011-06-05 05:47:46

标签: 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))

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

mat <- f(3)
apply(mat, 1, f)

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

2 个答案:

答案 0 :(得分:18)

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

因此alply()函数与apply()的工作方式类似,但始终返回一个列表:

alply(mat, 1, f)

答案 1 :(得分:13)

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

list_result <- lapply(split(mat,seq(NROW(mat))),f)
matrix_result <- do.call(rbind,list_result)