【发布时间】:2015-09-09 13:37:03
【问题描述】:
我在 R 中有(我认为应该是)一个直截了当的问题,但似乎无法让它发挥作用。希望你能帮忙。
我有一个数据框,例如:
x y z
1 2 a
2 3 a
3 4 a
4 5 b
5 6 b
6 7 b etc...
我正在为每个 z 值子集(例如 a、b...)拟合一个线性模型(y ~ x)并提取梯度。
当我使用 with 语句选择“a”时,它可以工作:
coef(with(subset(data.frame, z == "a"), {lm(y ~ x)
}))[2]
但我的问题是我在 Z 列中有超过 1000 个唯一值。所以我尝试设置一个循环(我知道 R 用户讨厌循环!)依次为每个 z 值执行此操作,并在数据框中返回结果。代码是:
gradient.lm = NULL
unique.z <- as.matrix((unique(data.frame$z)))
count.z <- nrow(unique.z)
for (i in 1:count.z) {
gradient.lm[i] = coef((with(subset(data.frame, z == [i]), {lm(y ~ z)
})))[2]
}
但这不起作用,并给我错误代码:
> for (i in 1:count.z) {
+ activity.lm[i] = coef((with(subset(data.frame, z == [i]), {lm(y ~ x)
Error: unexpected '[' in:
"for (i in 1:count.z) {
activity.lm[i] = coef((with(subset(data.frame, z == ["
> })))[2]
Error: unexpected '}' in " }"
> }
Error: unexpected '}' in "}"
我的猜测是它没有意识到 with 函数中有一个 [i]。
我找不到实现这项工作的方法,或者想出另一种方法。如果您有任何建议,我们将不胜感激。
【问题讨论】:
-
使用
z == unique.z[i]而不是z == [i] -
(将变量命名为函数通常是不好的做法 (
data.frame))
标签: r loops gradient subset lm