Ich stelle mir vor, das ist unglaublich einfach, aber ich kann die Antwort nicht finden.
Ich schreibe eine IF-Anweisung, aber der Test ist, ob das Objekt einen character(0)
Wert zurückgibt . Ich bin mir nicht sicher, wie ich character(0)
in der Erklärung damit umgehen soll .
Angenommen Test <- character(0)
oder ein Wert:
if (identical(Pols4,character(0))) {
print('Empty')
} else {
print('Not Empty')
}
Es scheint immer noch nicht zu funktionieren .....
r
if-statement
Methexis
quelle
quelle
length(character(0))
ist Null,if (length(x))
sollte es auch tun.length(NULL)
ist auch Null undlength(numeric(0))
auch.if(identical(Test, character(0)))
hat nicht funktioniert?Pols4
? Es funktioniert fürTest
Antworten:
Verwenden Sie die
identical
Funktion, um dies zu überprüfen.a <- character(0) identical(a, character(0)) # returns TRUE identical(a, "") # returns FALSE identical(a, numeric(0)) # returns also FALSE
quelle
FALSE
bis zu meiner Verwendung immer noch eine Rückgabe erhalten,identical(a,as.Date(character(0))
da der Wert auch dann angezeigt wurdecharacter(0)
, nachdem ich das Ergebnis als Datum früher in meinem Code umgewandelt hatte.character(0)
, sodass dieses Verhalten vollkommen in Ordnung ist.quote(character(0))
wird auch wiecharacter(0)
in der Konsole angezeigt und ist definitiv nicht identisch mitcharacter(0)
.a == character(0)
logical(0)
TRUE
==
funktioniert vektorweise (vgl.c("a","b")==c("a","c")
Rückgabec(TRUE,FALSE)
) undcharacter(0)
ein "Vektor vom Typ 'Zeichen' der Länge 0" ist (vgl.c("a", character(0))
Identisch mit"a"
). Daher ist ein "Vektor vom Typ 'logisch' der Länge 0" ein solides Ergebnis.Hinzufügen der obligatorischen tidyverse Antwort. Das
rlang
Paket hat die Funktionis_empty()
, die genau das tut, was Sie wollen.Test <- character(0) rlang::is_empty(Test) #[1] TRUE
Dies funktioniert auch für leere Vektoren, die keine Zeichen sind. Zum Beispiel funktioniert es in dem Fall, den Patrick Roocks in Kommentaren beschreibt.
Test <- as.Date(character(0)) rlang::is_empty(Test) #[1] TRUE
Das Laden des 'tidyverse'-Pakets wird ebenfalls geladen
is_empty()
.quelle
is_empty()
ist auch inpurrr
Verwenden Sie die Methode length ():
> check <- function(value) { + if (length(value)==0) { + print('Empty') + } else { + print('Not Empty') + } + } > check("Hello World") [1] "Not Empty" > check("") [1] "Not Empty" > check(character(0)) [1] "Empty"
quelle
Viele Menschen vergessen, dass Funktionen wie
str_locate_all()
erfordern%>% unlist()
oder%>% .[[1]]
.Dann können Sie
character(0)
mit derlength()
Funktion leicht erkennen, dass Sie beispielsweiseif > 0
die Ausgabe sicher verwenden könnenstr_locate_all()
.Beispiel:
value <- str_extract_all("kvk :", ascii_digit(8,8)) %>% unlist() if (length(value) > 0) { # Do something }
quelle
Meine Methode zur Lösung dieses Problems besteht darin, diese Spalte nur zu bearbeiten, indem ich sie erneut in ein Zeichen umwandle und stattdessen "Zeichen (0)" finde.
Zum Beispiel:
df$interest_column <- as.character(df$interest_column) # Cast it into a character again df[df$interest_column == "character(0)","interest_column"] <- NA # Assign new value
Ich hoffe, dies ist eine Lösung, nach der Sie gefragt haben.
quelle
statt
length()
für mich gearbeitetnrows()
quelle