Допустим, у нас есть заявление, которое производит integer(0)
, например,
a <- which(1:3 == 5)
Какой самый безопасный способ поймать это?
r
error-handling
integer
try-catch
Роман Луштрик
источник
источник
any
. Он вернет FALSE либо для, либоwhich(1:3==5)
для1:3==5
.integer(0)
, который я произвел, используяwhich
в качестве примера.which
? Это было бы очень полезно для меня, чтобы избежать плохого кода.Ответы:
Это способ, которым R печатает вектор нулевой длины (целое число), поэтому вы можете проверить
a
его на длину 0:Возможно, стоит переосмыслить стратегию, которую вы используете, чтобы определить, какие элементы вам нужны, но без дополнительных конкретных деталей трудно предложить альтернативную стратегию.
источник
Если это целые числа нулевой длины , то вы хотите что-то вроде
Проверьте это с помощью:
Вы также можете использовать
assertive
для этого.источник
!length(x)
а неlength(x)==0
length(x) == 0L
читается мне более четко.L
суффикса к числу заставляет R хранить его как целое, а не как значение с плавающей запятой. См., Например, cran.r-project.org/doc/manuals/R-lang.html#ConstantsМожет быть, не по теме, но в R есть две приятные, быстрые и пустые функции для сокращения логических векторов -
any
иall
:источник
is.empty
, потому что некоторые функции возвращаютinteger(0)
вместоNA
илиNULL
. Но пока ваш путь самый простой и работает векторно, что является большим преимуществом передlength(a)
.Вдохновленный ответом Андри, вы можете использовать
identical
и избегать любых проблем с атрибутами, используя тот факт, что это пустой набор этого класса объекта, и объедините его с элементом этого класса:Или в более общем плане:
источник
Во-вторых, я думаю, что любой красивее, чем
length(.)
:источник