为什么我的函数总是错误地将returns一个转置矩阵作为输出?

Why my function always mistakenly returns a transposed matrix as output?

我基本上是 R 的初学者,我的问题很可能有一个非常基本的答案,但经过多次尝试后我无法弄清楚为什么我的函数总是 return 是转置输出的原因。任何帮助深表感谢。我正在使用 Rstudio IDE、R 4.1.2.

我的目标是编写一个函数来向任何给定的数据帧添加两个额外的列,分别对应于每行的平均值和最大值。

所以我创建了一个示例数据框:

a <- c(1:10)
b <- c(11:20)
c <- c(21:30)
df <- data.frame(a,b,c)

然后我写了下面的函数:

desc_n <- function(x){
  return(cbind(
                mean(x, na.rm=T),
                max(x,na.rm=T))
              )
}

之后,我使用 apply() 函数将我新定义的 desc_n 函数应用于 df 数据帧的每一行。

n_df <- apply(df, 1, desc_n)

然而,虽然输出在数学上是正确的,但它被转置了。输出:

     [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
[1,]   11   12   13   14   15   16   17   18   19    20
[2,]   21   22   23   24   25   26   27   28   29    30

虽然我预计它是 10 行和 2 列。无论我做什么,输出都保持不变。我知道如何将输出转换为我的偏好,但这对我来说主要是一个学习示例。 所以我有两个问题:

  1. 当我在其中使用 cbind 时,为什么 desc_n 函数 return 的输出是 [2,10]? return 不应该是 [10,2] 输出吗?
  2. 为什么将 desc_n 函数中的 cbind 更改为 rbind returns 会得到完全相同的结果?

再次感谢您的帮助。谢谢。

您的结果由 apply 组合而成,apply 塑造了输出(当然,一路上使用了您的 desc_n 函数)。

来自 ?apply 帮助页面:

If each call to FUN returns a vector of length n, and simplify is TRUE, then apply returns an array of dimension c(n, dim(X)[MARGIN])

无论您以何种方式绑定它,您的 desc_n 函数 returns 长度为 2,所以您在 apply-simplified 输出中得到 2 行。