【问题标题】:double if conditioning in r language syntax [duplicate]r语言语法中的双重if条件[重复]
【发布时间】:2013-12-16 15:39:02
【问题描述】:

如果在 R 上使用语法,正确的写法是什么?

与:

for ( i in 1:200 ) {
     if( (time[i]<731) | (time[i]==NA) ) { x[i] <- NA }
}

我不断得到:

missing value where TRUE/FALSE needed

这个想法是削减时间序列的开头来计算统计数据。 xtime 都是数字。这个问题也不是完全重复的,另一篇文章处理的是 && 语句,没有 foo==NA 但 foo==0。我以为 |或 ||会像 (TRUE | NA) = TRUE 一样工作,但似乎我错了。

【问题讨论】:

    标签: r


    【解决方案1】:

    你不能写像if (foo==NA) 这样的东西,因为与NA 比较会返回NA。 相反,尝试

    if( is.na(foo))
    

    【讨论】:

    • @joran 非常客气地删除了你的回复——我以为你打败了我。
    • 当我点击提交时,你的已经在那里了。无论如何,约书亚找到了一个很好的副本。
    • if( (time[i]
    【解决方案2】:

    假设你想要:

    > n = 10
    > x <- rep(0, n)
    > time <- rpois(n, 731)
    > 
    > for ( i in 1:n ) {
    +   if( time[i] < 731 | is.na(time[i])) {  
    +     x[i] <- NA
    +   } 
    + }
    > x
     [1]  0  0 NA NA NA  0 NA NA  0  0
    

    你可以这样做:

    > ifelse(time < 731 | is.na(time[i]),  NA, x)
     [1]  0  0 NA NA NA  0 NA NA  0  0
    

    【讨论】:

      【解决方案3】:

      试试

      is.na(x) <- (time < 731 | is.na(time))
      

      【讨论】:

      • 这不行,它只会让x从头到尾充满NA。
      • @user3083324 有一个错字。尝试更新版本。
      猜你喜欢
      • 2012-12-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多