Digamos que temos uma declaração que produz integer(0)
, por exemplo
a <- which(1:3 == 5)
Qual é a maneira mais segura de entender isso?
r
error-handling
integer
try-catch
Roman Luštrik
fonte
fonte
any
. Ele retornará FALSE para umwhich(1:3==5)
ou para1:3==5
.integer(0)
, que produzi usandowhich
como exemplo.which
? Isso seria muito útil para evitar código incorreto.Respostas:
Essa é a maneira de R imprimir um vetor de comprimento zero (um inteiro), para que você possa testar o
a
comprimento 0:Pode valer a pena repensar a estratégia que você está usando para identificar quais elementos você deseja, mas sem mais detalhes específicos, é difícil sugerir uma estratégia alternativa.
fonte
Se for especificamente inteiros com comprimento zero , você deseja algo como
Verifique com:
Você também pode usar
assertive
para isso.fonte
!length(x)
ao invés de #length(x)==0
length(x) == 0L
lê com mais clareza.L
sufixo a um número faz com que R o armazene como um número inteiro em vez de um valor de ponto flutuante. Veja, por exemplo, cran.r-project.org/doc/manuals/R-lang.html#ConstantsTalvez fora de tópico, mas o R possui duas funções agradáveis, rápidas e com reconhecimento de vazio para reduzir vetores lógicos -
any
eall
:fonte
is.empty
, porque algumas funções retornam eminteger(0)
vez deNA
ouNULL
. Mas, por enquanto, seu caminho é o mais direto e funciona em vetor, o que é uma grande vantagemlength(a)
.Inspirado na resposta de Andrie, você pode usar
identical
e evitar problemas de atributo usando o fato de que é o conjunto vazio dessa classe de objeto e combiná-lo com um elemento dessa classe:Ou mais geralmente:
fonte
Pensando bem, acho que alguma é mais bonita que
length(.)
:fonte