R:with() 函数中的 apply() 函数
R: apply() function in with() function
假设有一个数据集,其中 10 名参与者填写了一份包含 3 个项目 x、y 和 z 的问卷。
ss <- data.frame(x=rnorm(10), y=rnorm(10), z=rnorm(10))
我想为每个人计算这些项目的平均值(个人平均值)。
我可以通过这种方式轻松做到这一点:
ss$personalmean <- rowMeans(ss[c("x", "y", "z")])
或者这样:
ss$personalmean <- apply(ss[c("x", "y", "z")], 1, mean)
但是假设我希望能够在 with 函数中做到这一点。然后我运行陷入困境
这个有效:
with(ss, (x+y+z)/3)
但事实并非如此:
with(ss, rowMeans(c(x,y,z)))
with(ss, apply(c(x,y,z), 1, mean))
我不明白为什么。这里的例子很简单,但简而言之,我想在函数 with()
.
中使用函数 apply()
如果有人在某处发布了该问题的良好答案,我深表歉意,但鉴于 "with" 是一个非常通用的术语,谷歌搜索我正在寻找的内容并不容易。
正如@Frank 在评论中提到的,apply
和 rowMeans
与 matrix/data.frame 一起使用。所以,如果我们想使用 with
,而不是 c
,cbind
将其转换为 matrix
,
with(ss, rowMeans(cbind(x,y,z)))
with(ss, apply(cbind(x,y,z), 1, mean))
假设有一个数据集,其中 10 名参与者填写了一份包含 3 个项目 x、y 和 z 的问卷。
ss <- data.frame(x=rnorm(10), y=rnorm(10), z=rnorm(10))
我想为每个人计算这些项目的平均值(个人平均值)。 我可以通过这种方式轻松做到这一点:
ss$personalmean <- rowMeans(ss[c("x", "y", "z")])
或者这样:
ss$personalmean <- apply(ss[c("x", "y", "z")], 1, mean)
但是假设我希望能够在 with 函数中做到这一点。然后我运行陷入困境
这个有效:
with(ss, (x+y+z)/3)
但事实并非如此:
with(ss, rowMeans(c(x,y,z)))
with(ss, apply(c(x,y,z), 1, mean))
我不明白为什么。这里的例子很简单,但简而言之,我想在函数 with()
.
apply()
如果有人在某处发布了该问题的良好答案,我深表歉意,但鉴于 "with" 是一个非常通用的术语,谷歌搜索我正在寻找的内容并不容易。
正如@Frank 在评论中提到的,apply
和 rowMeans
与 matrix/data.frame 一起使用。所以,如果我们想使用 with
,而不是 c
,cbind
将其转换为 matrix
,
with(ss, rowMeans(cbind(x,y,z)))
with(ss, apply(cbind(x,y,z), 1, mean))