Powiedzmy, że mamy stwierdzenie, które produkuje integer(0)
np
a <- which(1:3 == 5)
Jaki jest najbezpieczniejszy sposób złapania tego?
r
error-handling
integer
try-catch
Roman Luštrik
źródło
źródło
any
. Zwróci FALSE dla albo dla albowhich(1:3==5)
dla1:3==5
.integer(0)
, który stworzyłemwhich
na przykładzie.which
? Byłoby to dla mnie bardzo pomocne, aby uniknąć złego kodu.Odpowiedzi:
To jest sposób R na wydrukowanie wektora o zerowej długości (liczby całkowitej), więc możesz przetestować, czy
a
ma długość 0:Może warto przemyśleć strategię, której używasz, aby określić, które elementy chcesz, ale bez dalszych szczegółowych szczegółów trudno jest zaproponować alternatywną strategię.
źródło
Jeśli są to liczby całkowite o zerowej długości , potrzebujesz czegoś takiego
Sprawdź to na:
Możesz również użyć
assertive
do tego.źródło
!length(x)
zamiastlength(x)==0
length(x) == 0L
czyta mi się jaśniej.L
sufiksu do liczby powoduje, że R przechowuje ją jako liczbę całkowitą, a nie wartość zmiennoprzecinkową. Zobacz np. Cran.r-project.org/doc/manuals/R-lang.html#ConstantsMoże nie na temat, ale R ma dwie ładne, szybkie i świadome pustej funkcji do redukcji wektorów logicznych -
any
iall
:źródło
is.empty
, ponieważ niektóre funkcje zwracają sięinteger(0)
zamiastNA
lubNULL
. Ale na razie twoja droga jest najprostsza i działa pod względem wektorów, co jest dużą zaletąlength(a)
.Zainspirowany odpowiedzią Andrie, możesz użyć
identical
i uniknąć problemów z atrybutami, wykorzystując fakt, że jest to pusty zbiór tej klasy obiektów i łącząc go z elementem tej klasy:Lub bardziej ogólnie:
źródło
Z drugiej strony myślę, że każdy jest piękniejszy niż
length(.)
:źródło