Digamos que tenemos una declaración que produce integer(0)
, por ejemplo
a <- which(1:3 == 5)
¿Cuál es la forma más segura de atrapar esto?
r
error-handling
integer
try-catch
Roman Luštrik
fuente
fuente
any
. Devolverá FALSE para cualquierawhich(1:3==5)
o para1:3==5
.integer(0)
, que produje usandowhich
como ejemplo.which
? Esto sería muy útil para mí para evitar el código incorrecto.Respuestas:
Esa es la forma en que R imprime un vector de longitud cero (uno entero), por lo que puede probar que
a
sea de longitud 0:Puede valer la pena repensar la estrategia que está utilizando para identificar qué elementos desea, pero sin más detalles específicos es difícil sugerir una estrategia alternativa.
fuente
Si se trata específicamente de enteros de longitud cero , entonces quieres algo como
Compruébalo con:
También puedes usar
assertive
para esto.fuente
!length(x)
lugar delength(x)==0
length(x) == 0L
lee con más claridad.L
sufijo a un número hace que R lo almacene como un número entero en lugar de un valor de coma flotante. Véase, por ejemplo, cran.r-project.org/doc/manuals/R-lang.html#ConstantsTal vez fuera de tema, pero R presenta dos funciones agradables, rápidas y conscientes de vacío para reducir vectores lógicos,
any
yall
:fuente
is.empty
, porque algunas funciones regresan eninteger(0)
lugar deNA
oNULL
. Pero por ahora su camino es el más sencillo y funciona en forma de vector, lo cual es una gran ventajalength(a)
.Inspirado por la respuesta de Andrie, puede usar
identical
y evitar cualquier problema de atributo al usar el hecho de que es el conjunto vacío de esa clase de objeto y combinarlo con un elemento de esa clase:O más generalmente:
fuente
Pensándolo bien, creo que cualquiera es más hermoso que
length(.)
:fuente