Disons que nous avons une déclaration qui produit integer(0)
, par exemple
a <- which(1:3 == 5)
Quelle est la manière la plus sûre d'attraper cela?
r
error-handling
integer
try-catch
Roman Luštrik
la source
la source
any
. Il renverra FALSE pour l'unwhich(1:3==5)
ou l' autre pour1:3==5
.integer(0)
, que j'ai produit en utilisantwhich
comme exemple.which
? Ce serait très utile pour moi d'éviter un mauvais code.Réponses:
C'est la manière de R d'imprimer un vecteur de longueur nulle (un entier), vous pouvez donc tester
a
sa longueur 0:Il pourrait être utile de repenser la stratégie que vous utilisez pour identifier qui des éléments que vous voulez, mais sans plus de détails de spécifiques , il est difficile de proposer une stratégie alternative.
la source
Si c'est spécifiquement des entiers de longueur nulle , alors vous voulez quelque chose comme
Vérifiez-le avec:
Vous pouvez également utiliser
assertive
pour cela.la source
!length(x)
plutôt quelength(x)==0
length(x) == 0L
me lit plus clairement.L
suffixe à un nombre fait que R le stocke sous forme d'entier plutôt que de valeur à virgule flottante. Voir, par exemple, cran.r-project.org/doc/manuals/R-lang.html#ConstantsPeut-être hors sujet, mais R propose deux fonctions intéressantes, rapides et vides pour réduire les vecteurs logiques -
any
etall
:la source
is.empty
, parce que certaines fonctions retournentinteger(0)
au lieu deNA
ouNULL
. Mais pour l'instant, votre chemin est le plus simple et fonctionne en mode vectoriel, ce qui est un gros avantagelength(a)
.Inspiré par la réponse d'Andrie, vous pouvez utiliser
identical
et éviter tout problème d'attribut en utilisant le fait qu'il s'agit de l'ensemble vide de cette classe d'objet et en le combinant avec un élément de cette classe:Ou plus généralement:
la source
À la réflexion, je pense que tout est plus beau que
length(.)
:la source