【发布时间】:2012-09-14 23:42:04
【问题描述】:
我有一个值向量(仅限数字)。我想把这个向量分成两个向量。一个向量将包含小于原始向量平均值的值,另一个向量将包含大于原始向量平均值的值。我有以下作为测试 R 脚本:
v <- c(1,1,4,6,3,67,10,194,847)
#Initialize
v.in<- c(rep(0),length(v))
v.out<- c(rep(0),length(v))
for (i in 1:length(v))
{
if (v < 0.68 * mean(v))
{
v.in[i] <- v[i]
}
else
{
v.out[i] <- v[i]
}
}
v.in
v.out
## <https://gist.github.com/8a6747ea9b7421161c43>
我得到以下结果:
9: In if (v < 0.68 * mean(v)) { :
the condition has length > 1 and only the first element will be used
> v.in
[1] 1 1 4 6 3 67 10 194 847
> v.out
[1] 0 9
> v
[1] 1 1 4 6 3 67 10 194 847
>
显然,0 和 9 不是 v 中任何元素的值。
对发生了什么以及如何解决此问题有何建议?
谢谢, 埃德
【问题讨论】:
-
将条件更改为
(v[i] < 0.68 * mean(v))(即在不等式左侧使用v[i]而不是v) -
还有
c(rep(0),length(v))应该是rep(0, length(v)) -
并且您使用的缩进样式通常与 R 不兼容。请参阅burns-stat.com/pages/Tutor/R_inferno.pdf 的“意外其他”部分以获得很好的解释。
-
谢谢 Ben,我用 if(v[i]
标签: r for-loop compare if-statement