Создание тиббла возвращает ошибку из-за имени - PullRequest
0 голосов
/ 10 октября 2018

У меня есть 2 вектора.Я пытаюсь создать тиббл со всеми комбинациями двух векторов со следующей ошибкой:

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

Я подозреваю, что длина (C) принимает значение 'C' из таблицы.Это намеренное поведение?Если да, то может ли кто-нибудь объяснить, как это полезно на практике?(то есть, как кто-то может воспользоваться этим в своем коде)

1 Ответ

0 голосов
/ 10 октября 2018

Поскольку тиблы являются расширением 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

... где вы можете ссылаться на ранее созданные столбцы.И ваш пример является примером того, когда это может быть проблемой.

Чтобы процитировать руководство:

«Аргументы оцениваются последовательно, поэтому вы можете ссылаться на ранее созданные переменные».

Источник: http://tibble.tidyverse.org/reference/tibble.html

Так что в этом случае C в rep(G, length(C)) фактически ссылается на только что созданный вами tibblename$C, то есть длина20, а не вектор C в глобальной среде, который имеет длину 4.

...