Почему 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 для деталей.

Другие вопросы по тегам