NA в подмножестве - непоследовательное поведение - программирование

NA в подмножестве - непоследовательное поведение

Рассмотрим следующее:

seq(from=10,to=30)[c(4,8)]
[1] 13 17

seq(from=10,to=30)[c(NA,8)]
[1] NA 17

seq(from=10,to=30)[c(NA,NA)]
[1] NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA

Для меня результат последнего не согласуется с тем, как два других примера обрабатываются R и стоили мне довольно неприятных отладочных усилий.

Может ли это считаться ошибкой?

4b9b3361

Ответ 1

Не уверен, что это ошибка - я подозреваю, что это зависит от вашей точки зрения, но это тонкость работы индексации. Быстрое решение - изменить свой третий пример на:

seq(from=10,to=30)[as.numeric(c(NA,NA))]

Причина в том, что c(NA,NA) является логическим вектором, поэтому используется логическое подмножество (которое включает в себя рециркуляцию вектора), тогда как наличие хотя бы одного не-NA заставляет вектор продвигаться к целочисленному вектору. Аналогично, это может быть реализовано как:

seq(from=10,to=30)[c(NA_integer_,NA_integer_)]

См. ?'[' для специфики индексирования, если вы не знакомы с ними.