为什么R的apply函数会将行与列混淆?

时间:2017-04-20 05:27:04

标签: r

以下代码:

set.seed(0)
m<-matrix(data=runif(6),nrow=2)

apply(m,1,print)
apply(m,1,function(x) print(x) )

给出:

[1] 0.8966972 0.3721239 0.9082078
[1] 0.2655087 0.5728534 0.2016819
          [,1]      [,2]
[1,] 0.8966972 0.2655087
[2,] 0.3721239 0.5728534
[3,] 0.9082078 0.2016819

因此,一次打印按行逐行执行,另一次按列执行。为什么?根据我的理解,两次调用apply / print都应该做同样的事情。

1 个答案:

答案 0 :(得分:7)

这里要区分两件事:print 打印,以及返回的内容。

数字向量的print方法会将向量的内容打印到屏幕上。这是你得到的输出的第一部分:

[1] 0.8966972 0.3721239 0.9082078
[1] 0.2655087 0.5728534 0.2016819

这里,第一行是矩阵第1行的打印输出,第二行是第2行的打印输出。

除此之外,print方法是一个函数,就像任何其他函数一样;它返回一个值。它返回的值是(对于默认方法)传递给它的内容。此返回值将作为一系列向量传递回applyapply然后将这些向量连接成矩阵:

          [,1]      [,2]
[1,] 0.8966972 0.2655087
[2,] 0.3721239 0.5728534
[3,] 0.9082078 0.2016819

为什么将载体视为列向量?因为那是apply的作用。来自?apply

  

<强>值

     

如果每次调用FUN都返回长度为n的向量,则如果n> 1,则apply返回维度c(n,dim(X)[MARGIN])的数组。 1.如果n等于1,则如果MARGIN的长度为1,则apply返回向量,否则返回维度为dim(X)[MARGIN]的数组。