我在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]。
我找不到做这项工作的方法,也没有想出另一种方法来做。如果您有任何建议,将不胜感激。
在base-R中,为您提供仅包含您显然感兴趣的渐变的命名向量:
gradient.lm <- unlist(lapply(split(df,df$z),function(chunk){
return(coef(lm(y~x, data=chunk))[[2]])
}))
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句