r - 为什么 R 的应用函数会将行与列混淆?

标签 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 的两个调用都应该做完全相同的事情。

最佳答案

这里有两点需要区分:什么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/

相关文章:

r - 将带有 data.frames 的列拆分为多行

r - 如何在R中的散点图上的特定数据点周围放置圆圈?

r - 使用 roxygen2 记录数据帧列表

r - bookdown 中 tikz 用法的最小工作示例?

r - 计算 big.matrix 的平均值

r - 通过匹配字符串分隔列

R:扫描向量一次而不是 4 次?

regex - gsub 没有替换 R 中的所有预期匹配项

r - 将两组列名称传递给函数

r - 带 lm() 函数的 ddply