神秘值作为向量R中使用if和else的输出



我有一个值的向量(仅限数字)。我想把这个向量分成两个向量。一个向量包含的值将小于原始向量的平均值,另一个向量将包含的值大于原始向量的均值。我有以下作为测试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.中任何元素的值

有什么建议吗?发生了什么以及如何解决这个问题?

谢谢,Ed

@BenBolker在评论中指出了代码不起作用的原因:使用if时,需要从v中选择一个元素。然而,您可能会发现split对于这样的任务来说是一个更好的功能:

split(v,v<0.68*mean(v))
$`FALSE`
[1] 194 847
$`TRUE`
[1]  1  1  4  6  3 67 10

v.out之谜的答案是它的分支没有被选中,所以它不会被更改。因此,它保留了它的初始值,(可能)错误地给出了单个0的值和向量的长度(9),而不是我怀疑你想要的九个零拷贝。

相关内容

  • 没有找到相关文章

最新更新