R-код ниже дает неожиданные результаты. (Я ставлю NULL
в b
только для тестирования. Мой интерес представляет характер «NULL»)R: почему совпадающий символ «NULL» для аргумента функции вызывает неожиданные результаты?
f <- function(a, b = c('x', 'NULLL', NULL)) {
print(a)
b <- match.arg(b)
print(class(b))
print(b)
print(b == 'NULL')
print(b == "NULL")
print(is.null(b))
}
f(2)
f(2, 'x')
f(2, 'NULL')
Результаты выглядят следующие. Я предполагаю, что для f(2, 'NULL')
должно быть напечатано 'TRUE
, не так ли? Действительно странно для меня! Любые объяснения? Большое спасибо!
R 3.2.3> f(2)
[1] 2
[1] "character"
[1] "x"
[1] FALSE
[1] FALSE
[1] FALSE
R 3.2.3> f(2, 'x')
[1] 2
[1] "character"
[1] "x"
[1] FALSE
[1] FALSE
[1] FALSE
R 3.2.3> f(2, 'NULL')
[1] 2
[1] "character"
[1] "NULLL"
[1] FALSE
[1] FALSE
[1] FALSE
Кажется, соответствие «NULL» - плохая практика в R. Это? –
Боковое примечание. Возможно, вы захотите посмотреть результат 'c ('x', 'NULLL', NULL)'. Третий элемент будет удален. Удаляются нули в атомных векторах. Если вам нужен истинный нулевой элемент, используйте там список. –
Затем не следует печатать (b == "NULL"), чтобы создать TRUE? –