以下代码:
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 的两个调用都应该做完全相同的事情。
最佳答案
这里有两点需要区分:什么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
:Value
If each call to FUN returns a vector of length n, then apply returns an array of dimension c(n, dim(X)[MARGIN]) if n > 1. If n equals 1, apply returns a vector if MARGIN has length 1 and an array of dimension dim(X)[MARGIN] otherwise.
关于r - 为什么 R 的应用函数会将行与列混淆?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43510907/