为什么 R 不生我的小毛病:悬空逗号的故事

Why is R not angry with my tibble: the tale of the dangling comma that could

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

为什么会这样?怎么了……对吧?

我相信该代码有效,因为 tibble() 的参数是使用 rlang::quos() 处理的名称-值对。

quos() 有一个参数 .ignore_empty = c("trailing", "none", "all").

所以 .ignore_empty 的默认值是 "trailing" - tibble 的最后一个参数如果为空则被忽略。如果您更改此设置,您将看到一个错误:

tibble(a = 1, .ignore_empty = "none",)
Error in eval_tidy(xs[[i]], unique_output) : object '' not found

有关详细信息,请参阅 ?tibble?quos