使用apply族而不是for循环获得子列表R中每行的最大值的等效方法

使用apply族而不是for循环获得子列表R中每行的最大值的等效方法,r,apply,do.call,R,Apply,Do.call,使用apply系列函数或do.call和apply之间的组合,与此等效的是什么?我希望保持它的简单性,并尽可能在一行中: a <- list( as.data.frame(matrix(rnorm(12),4,3)), as.data.frame(matrix(rnorm(12),4,3)), as.data.frame(matrix(rnorm(12),4,3)) ) l <- list() for (i in

使用
apply
系列函数或
do.call
apply
之间的组合,与此等效的是什么?我希望保持它的简单性,并尽可能在一行中:

a <- list(  as.data.frame(matrix(rnorm(12),4,3)),
            as.data.frame(matrix(rnorm(12),4,3)),
            as.data.frame(matrix(rnorm(12),4,3))
         )

l <- list()
for (i in 1:length(a)) {
  l[[i]] <- apply(a[[i]],1,max)
}

b <- do.call(data.frame, l)

a对于这个特定的例子,我会使用
sapply
,但是我不知道这个例子对你实际的更大问题有多大的代表性

> sapply(a, function(x) apply(x, 1, max))
          [,1]      [,2]       [,3]
[1,] 0.5757814 0.9189774  0.6198257
[2,] 0.1836433 0.9438362  0.4179416
[3,] 1.5117812 1.1249309  1.3586796
[4,] 1.5952808 0.5939013 -0.1027877

sapply
将尽可能简化为矩阵。如果您想要一个
data.frame
,只需像这样将输出包装在
data.frame

中,看起来就更容易了。。。非常感谢!你为什么喜欢
sapply
而不喜欢
lappy
?@eccehomo,
lappy
将创建一个
列表
sapply
将简化为
矩阵
,如我所述。因此,对于这个特定的问题,它似乎更合适。vapply甚至更好,尤其是在编写函数时。@hadley,我听说过关于
vapply
的好消息,但我并不经常想到它——部分原因是帮助页面文档的服务非常少。在这种情况下,您是否认为这样更好,因为我们可以指定输出应采用何种形式?@SimonO101如果我拒绝任何人,我很抱歉。我认为接受这个答案是对作者的赞扬。我很高兴投更多的赞成票,这就是它的工作方式。很抱歉。@SimonO101谢谢您的反馈!不客气!