R中的if语句:尽管存在值,但仍出现“缺少值”错误

时间:2019-04-26 16:18:59

标签: r if-statement

如果存在一个完全健康的值,则if语句将返回“缺少值”错误。

我想编写一个简单的脚本来删除数据集中的行(如果其中一个条目包含某个标记)。我在新列(containsMR)中分配了一个指标变量,然后使用for循环遍历各行。如果指示器为TRUE,则应删除该行。

到目前为止,指标分配正确,效果很好。有趣的部分:在循环的if语句中似乎难以读取值,因为它返回“ if(data(containsMR [i]){   缺少需要TRUE / FALSE的值”。

给出正确(且完整)的指标变量分配,这让我感到惊讶。更奇怪的是:删除了一些但不是全部带有正指示符的行(使用打印输出和table(data $ containsMR)进行了检查)。

现在真的很奇怪:如果我再运行一次相同的循环,它将删除其余的列(应有的话),但返回相同的错误。因此,从理论上讲,我可以运行两次循环,忽略错误并获得想要的结果。那真的不是我在做什么的重点。

修正的修正: -从for改为while循环 -将指标(和if语句)更改为整数(0,1) -在RStudio和R控制台中运行脚本 -更改了变量名称,包括了/排除了定义(例如,添加代理变量row_number而不是一行调用它。

# Script to delete all rows containing "MR" in column "EXAM_CODE"

# import file
data <- read.csv("C:\\ScriptingTest\\ablations 0114.csv")

# add indicator column
for (i in 1:nrow(data)){
    data$containsMR[i] <- ifelse(grepl("MR", toString(data$EXAM_CODE[i])), TRUE, FALSE)
}

# remove rows with positive indicator
row_number <- nrow(data)
for (i in 1:row_number){
    if (data$containsMR[i]){
        data <- data[-c(i),]
    }
}

# export csv
write.csv(data, "C:\\ScriptingTest\\export.csv")

2 个答案:

答案 0 :(得分:1)

为说明问题是在要循环的for循环中修改对象的大小,请参见以下示例:

PRE_TARGETDEPS += path/to/mylib.a

答案 1 :(得分:0)

您也许可以简化为

newdata <-  data[!grepl("MR", data$EXAM_CODE),]