Как называется неявное векторное повторение R?

#r #vector

#r #вектор

Вопрос:

Следующий код повторяет вектор c(3,4) дважды, чтобы заполнить фрейм данных.

 > data.frame(x=c(1,2,5,6), y=c(3,4))
  x y
1 1 3
2 2 4
3 5 3
4 6 4
  

Как именно называется это поведение, и есть ли хорошая ссылка на то, как оно работает?

Я уверен, что этот вопрос задавался миллион раз, но я просто не могу вспомнить термины, Поэтому все мои поиски «повторения вектора r» и т. Д. Идут Не в то место.

Комментарии:

1. Это известно как переработка значений!

2. Смотрите определение языка R: cran.r-project.org/doc/manuals/r-release /…

Ответ №1:

То, что вы ищете, известно как значения рециркуляции. Можно видеть, что data.frame() функция для создания прямоугольной структуры с определенным количеством строк и столбцов будет размещать значения в соответствии с длиной фрейма данных. Например:

 #Code 1
df <- data.frame(v1=rnorm(10,1,1),v2=1)
  

Вывод:

             v1 v2
1   2.54778001  1
2  -0.69632427  1
3   1.51183106  1
4   1.68531980  1
5  -0.70046933  1
6   1.40192042  1
7  -0.09775118  1
8   2.07676738  1
9   1.82864514  1
10  1.82787072  1
  

В этом случае v2 оно будет повторно использовано 1 раз из-за его длины. Теперь еще один пример:

 #Code 2
df <- data.frame(v1=rnorm(10,1,1),v2=1:2)
  

Вывод:

            v1 v2
1   0.4479530  1
2   1.4414374  2
3  -0.6545890  1
4   0.6860653  2
5   0.5052426  1
6   0.8525879  2
7   1.6122026  1
8   0.4432882  2
9   2.1471107  1
10 -0.7284869  2
  

По той же логике функция будет перерабатывать значения в соответствии с длиной наибольшего вектора. Просто будьте осторожны, чтобы переработка выполнялась, когда длина векторов кратна. Это когда у них есть общий фактор. Например, df <- data.frame(v1=rnorm(10,1,1),v2=1:3) приведет к ошибке, но df <- data.frame(v1=rnorm(9,1,1),v2=1:3) будет работать нормально.

Ответ №2:

Мы также можем использовать tibble

 library(tibble)

tibble(v1=rnorm(10,1,1),v2=1)
# A tibble: 10 x 2
#        v1    v2
#     <dbl> <dbl>
# 1 -0.524      1
# 2  1.41       1
# 3  0.0863     1
# 4  0.344      1
# 5 -0.0997     1
# 6  0.214      1
# 7 -0.362      1
# 8  2.80       1
# 9  0.707      1
#10  0.955      1