Почему R не злится на мой кусок: рассказ о висящей запятой, которая могла
R хочет, чтобы все было так. Команды должны быть абсолютно правильными, и это совершенно правильно.
Таким образом, висячие запятые плохие.
Например, по вектору:
> c(1,)
Error in c(1, ) : argument 2 is empty
Или фрейм данных:
> data.frame(a = 1,)
Error in data.frame(a = 1, ) : argument is missing, with no default.
Но не на тибле по какой-то причине:
> tibble(a = 1,)
# A tibble: 1 x 1
a
<dbl>
1 1
Почему это так? Что прошло... правильно?
1 ответ
Решение
Я считаю, что код работает, потому что аргументы tibble()
являются парами имя-значение, которые обрабатываются с использованием rlang::quos()
,
quos()
есть аргумент .ignore_empty = c("trailing", "none", "all")
,
Так что по умолчанию для .ignore_empty
"трейлинг" - то есть последний аргумент tibble
игнорируется, если пуст. Если вы измените это, вы увидите ошибку:
tibble(a = 1, .ignore_empty = "none",)
Error in eval_tidy(xs[[i]], unique_output) : object '' not found
Увидеть ?tibble
а также ?quos
для деталей.