为什么 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
。
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
。