错误:缺失值的真/假

问题描述:

我想删除标签为“.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

请提供更多详细信息:显示'GRef'中的内容示例。 – Abdou

+0

你probaby在第一个外部if语句中有一个NA。在'if'打印等号的左边之前放一个'print'调用。 – Adam

+0

这可能是一个文件的结果,它只有一个'.',这意味着索引它在3会超出界限 – Adam

在循环播放时,您不应尝试修改矢量。问题是你正在删除你然后试图提取的项目,这是导致缺失的值。最好确定要先移除的所有项目,然后移除它们。例如

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

大部分工作。你能解释使用的语法吗? (即为什么要使用sapply(strsplit(格列夫, “[]”),'[',3)编辑:。?。我的主要误解是用'['这是什么做 – naveace

+0

'strsplit'返回一个列表的' sapply“遍历该列表,'[''是子集函数,因此它从列表中的每个向量提取第三个元素。 – MrFlick