为什么我的函数总是错误地将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 列。无论我做什么,输出都保持不变。我知道如何将输出转换为我的偏好,但这对我来说主要是一个学习示例。
所以我有两个问题:
- 当我在其中使用 cbind 时,为什么 desc_n 函数 return 的输出是 [2,10]? return 不应该是 [10,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 行。
我基本上是 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 列。无论我做什么,输出都保持不变。我知道如何将输出转换为我的偏好,但这对我来说主要是一个学习示例。 所以我有两个问题:
- 当我在其中使用 cbind 时,为什么 desc_n 函数 return 的输出是 [2,10]? return 不应该是 [10,2] 输出吗?
- 为什么将 desc_n 函数中的 cbind 更改为 rbind returns 会得到完全相同的结果?
再次感谢您的帮助。谢谢。
您的结果由 apply
组合而成,apply
塑造了输出(当然,一路上使用了您的 desc_n
函数)。
来自 ?apply
帮助页面:
If each call to
FUN
returns a vector of lengthn
, andsimplify
isTRUE
, thenapply
returns an array of dimensionc(n, dim(X)[MARGIN])
无论您以何种方式绑定它,您的 desc_n
函数 returns 长度为 2,所以您在 apply-simplified 输出中得到 2 行。