由于名称而创建 tibble returns 错误

Creating tibble returns error due to name

我有 2 个向量。我正在尝试使用 2 个向量的所有组合创建一个 tibble,但出现以下错误。

C <- c(1,2,3,4)
G <- c(1,2,3,4,5)
tibble('C' = rep(C, each = length(G)), 'G' = rep(G, length(C)))
Error: Column `C` must be length 1 or 100, not 20

例如,当我将列 'C' 重命名为列 'A' 时,错误消失了。 data.frame

也不会出现同样的错误

我怀疑 length(C) 从 tibble 中获取 'C' 值。 这是预期的行为吗? 如果可以,有人可以解释这在实践中有何用处吗? (即有人会如何在他们的代码中利用这一点)

因为 tibbles 是 data.frame 的扩展,而不是确切的直接替换,您可以执行以下操作:

tibble(a=1:3, b=a+1)
## A tibble: 3 x 2
#      a     b
#  <int> <dbl>
#1     1     2
#2     2     3
#3     3     4

...您可以在其中引用之前创建的列。你的例子说明了这可能是个问题。

引用说明书:

"Arguments are evaluated sequentially, so you can refer to previously created variables."

来源:http://tibble.tidyverse.org/reference/tibble.html

所以在这种情况下,rep(G, length(C))中的C实际上引用了你刚刚创建的tibblename$C,它的长度为20,而不是C中的向量全局环境,长度为 4.