【问题标题】:How to fix error code "missing value where TRUE/FALSE needed"如何修复错误代码“需要 TRUE/FALSE 的缺失值”
【发布时间】:2019-03-29 19:17:10
【问题描述】:

我正在寻找一个数据集 (df_freeGammas) 并总结该数据集的某些组成部分。数据集分为受试者和不同的测试编号(受试者 1,测试 1)。有些科目有超过 1 项测试。每个测试都有对应于测试和主题的 16 行数据的子集。我希望能够使用循环或嵌套循环将主题编号放在结果矩阵中。我想出了一种方法来做到这一点,但我不断收到错误: “如果 (df_freeGammas[n, 2] != df_freeGammas[n + 1, 2]) { 中的错误: 需要 TRUE/FALSE 的缺失值” 请帮忙。

我尝试添加更多 if 循环和 while 循环。

for (n in 1:nrow(df_freeGammas)){
+    if (df_freeGammas[n,2] != df_freeGammas[n+1,2]){
+         Results[n/16,1] = df_freeGammas[n,1]}
+       else if (df_freeGammas[n,1] != df_freeGammas[n+1,1]){
+           Results[n/16,1] = df_freeGammas[n,1]}
+         else 
+           invisible()

我期待结果,但没有错误消息。

【问题讨论】:

  • 你能在 if 语句之前打印出 "df_freeGammas[n,2] != df_freeGammas[n+1,2]" 的值吗?我的猜测是它正在评估为非布尔值。
  • “df_freeGammas[n,2] != df_freeGammas[n+1,2]”的打印值为 NA。您有什么建议可以将类似的语句设为布尔值吗?我尝试切换到 添加另一个 if 循环,但这不起作用。
  • 请看下面的答案。

标签: loops if-statement nested-loops


【解决方案1】:

看起来您的一项相等性检查正在评估为“NA”,而不是 TRUE/FALSE。

here 所述,一个潜在的解决方案是为不适用的情况添加一个子句。

对于您的用例,这可能看起来像这样:

(df_freeGammas[n,2] != df_freeGammas[n+1,2]) & !is.na(df_freeGammas[n,2] != df_freeGammas[n+1,2])

仅当两个值不相等时,上述内容才会返回 TRUE,并且相等检查的计算结果为 Non-NA。

与往常一样,如果此答案解决了问题,请务必将其标记为已接受。

谢谢!

【讨论】:

    猜你喜欢
    • 2015-10-06
    • 1970-01-01
    • 2020-07-29
    • 1970-01-01
    • 2022-06-22
    • 1970-01-01
    • 2019-03-07
    • 2013-12-10
    • 1970-01-01
    相关资源
    最近更新 更多