以下代码:
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都应该做同样的事情。
答案 0 :(得分:7)
这里要区分两件事:print
打印,以及返回的内容。
数字向量的print
方法会将向量的内容打印到屏幕上。这是你得到的输出的第一部分:
[1] 0.8966972 0.3721239 0.9082078
[1] 0.2655087 0.5728534 0.2016819
这里,第一行是矩阵第1行的打印输出,第二行是第2行的打印输出。
除此之外,print
方法是一个函数,就像任何其他函数一样;它返回一个值。它返回的值是(对于默认方法)传递给它的内容。此返回值将作为一系列向量传递回apply
。 apply
然后将这些向量连接成矩阵:
[,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]的数组。