Nehmen wir an, wir haben eine Aussage, die integer(0)
z
a <- which(1:3 == 5)
Was ist der sicherste Weg, dies zu fangen?
r
error-handling
integer
try-catch
Roman Luštrik
quelle
quelle
any
. Es wird FALSE für entwederwhich(1:3==5)
oder für zurückgeben1:3==5
.integer(0)
, was ich amwhich
Beispiel produziert habe.which
? Dies wäre sehr hilfreich für mich, um schlechten Code zu vermeiden.Antworten:
Auf diese Weise druckt R einen Vektor mit der Länge Null (eine Ganzzahl Eins), sodass Sie testen können, ob
a
er die Länge 0 hat:Es könnte sich lohnen, die Strategie, mit der Sie die gewünschten Elemente identifizieren, zu überdenken. Ohne weitere spezifische Details ist es jedoch schwierig, eine alternative Strategie vorzuschlagen.
quelle
Wenn es sich speziell um Ganzzahlen mit der Länge Null handelt , möchten Sie so etwas wie
Überprüfen Sie es mit:
Sie können dies auch verwenden
assertive
.quelle
!length(x)
eher alslength(x)==0
length(x) == 0L
lese mir klarer vor.L
Zahl ein Suffix hinzufügen, speichert R es als Ganzzahl und nicht als Gleitkommawert. Siehe z. B. cran.r-project.org/doc/manuals/R-lang.html#ConstantsVielleicht nicht zum Thema gehörend, aber R bietet zwei nette, schnelle und leere Funktionen zum Reduzieren logischer Vektoren -
any
undall
:quelle
is.empty
gäbe, denn einige Funktionen kehreninteger(0)
anstelle vonNA
oder zurückNULL
. Aber im Moment ist Ihr Weg der einfachste und funktioniert vektoriell, was ein großer Vorteil gegenüber istlength(a)
.Inspiriert von Andries Antwort könnten Sie
identical
Attributprobleme verwenden und vermeiden, indem Sie die Tatsache verwenden, dass es sich um die leere Menge dieser Objektklasse handelt, und sie mit einem Element dieser Klasse kombinieren:Oder allgemeiner:
quelle
Beim zweiten Gedanken finde ich, dass jeder schöner ist als
length(.)
:quelle