在以下示例中,apply如何工作?

时间:2019-03-09 18:19:37

标签: r

sapply(list(runif (10), runif (10)), 
       function(x) c(min = min(x), mean = mean(x), max = max(x)))

上面的代码为什么给出3行2列而不是2行3列的矩阵?

1 个答案:

答案 0 :(得分:0)

编辑(以下为原始答案,并附有说明)

我们可以使用ldply中的plyr,因为它直接为我们提供了data.frame对象。

plyr::ldply(list(runif(10),runif(10)),
            function(x) c(Min=min(x),Mean=mean(x),Max=max(x)))


  #         Min      Mean       Max #No seed
   # 1 0.03964594 0.3960042 0.7345305
   # 2 0.05233872 0.3811633 0.9713190

原始

该列表包含两个部分:

list(runif(10),runif(10))

从每个列表中,我们找到最小值,最大值和平均值,从而得出输出。 要了解原因,请尝试单独运行:

sapply(list(runif (10)), function(x) c(min = min(x), mean = mean(x), max = max(x)))

如果更改simplify参数,则可以得到您希望(我认为)具有的输出:

sapply(list(runif (10)), function(x) c(min = min(x), mean = mean(x), max = max(x)),
       simplify = F)

 #[[1]]
 #         min      mean       max #No seed
 #  0.2482040   0.4845170 0.8294896 

注意:: ,您需要set.seed才能重现。