错误:缺少值True / False

时间:2016-07-27 15:18:43

标签: r list strsplit

我正在尝试删除列表中包含标记" .dsw"的所有值。我的列表是使用函数list.files的文件列表。这是我的代码:

for (file in GRef) {
  if (strsplit(file, "[.]")[[1]][3] == "dsw") {
     #GRef=GRef[-file]
    for(n in 1:length(GRef)){
      if (GRef[n] == file){
        GRef=GRef[-n]
      }
    }
  }
}

其中GRef是文件名列表。我得到上面列出的错误,但我不明白为什么。我看过这篇文章:Error .. missing value where TRUE/FALSE needed,但我认为这不是一回事。

1 个答案:

答案 0 :(得分:0)

在循环播放时,您不应尝试修改矢量。问题是您正在删除之后尝试提取的项目,这会导致缺失值。最好先识别要删除的所有项目,然后将其删除。例如

GRef <- c("a.file.dsw", "b.file.txt", "c.file.gif", "d.file.dsw")
exts <- sapply(strsplit(GRef, "[.]"), `[`, 3)
GRef <- GRef[exts!="dsw"]