2016-07-27 6 views
0

Ich versuche, alle Werte in einer Liste zu löschen, die das Tag ".dsw" haben. Meine Liste ist eine Liste von Dateien mit der Funktion list.files. Das ist mein Code:Fehler: fehlender Wert mit True/False

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] 
     } 
    } 
    } 
} 

Wo ist GRef die Liste der Dateinamen. Ich bekomme den oben aufgeführten Fehler, aber ich verstehe nicht warum. Ich habe diesen Beitrag angesehen: Error .. missing value where TRUE/FALSE needed, aber ich denke nicht, dass es das gleiche ist.

+1

Bitte geben Sie mehr Details: zeigen Sie eine Probe des Inhalts in 'GRef'. – Abdou

+0

Sie haben wahrscheinlich eine NA in der ersten äußeren 'if' Anweisung. Setzen Sie einen 'print'-Aufruf direkt vor dem 'if'-Ausdruck der linken Seite der Gleichheit. – Adam

+0

Es ist wahrscheinlich das Ergebnis einer Datei, die nur ein einziges "." Enthält, was bedeutet, dass die Indizierung bei 3 außerhalb der Grenzen liegt. – Adam

Antwort

0

Sie sollten nicht versuchen, einen Vektor zu ändern, während Sie ihn durchlaufen. Das Problem besteht darin, dass Sie Elemente entfernen, die Sie später extrahieren möchten und die die fehlenden Werte verursachen. Es ist besser, alle Elemente, die Sie entfernen möchten, zuerst zu entfernen und dann zu entfernen. Zum Beispiel

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

Das funktioniert größtenteils. Würdest du die Syntax erklären können? (zB warum sapply verwenden (strsplit (GRef, "[.]"), '[', 3) BEARBEITEN: Mein Hauptmissverständnis ist mit dem '['. Was macht das? – naveace

+0

'strsplit' gibt eine Liste zurück "Sapply" iteriert über diese Liste und das "[" ist die Teilmengenfunktion, so dass es das dritte Element aus jedem Vektor in der Liste extrahiert. – MrFlick

Verwandte Themen