Автоматизация создания нескольких фреймов данных или векторов с именами векторов - PullRequest
1 голос
/ 28 мая 2020

Проще говоря, в этом примере у меня есть вектор с 3 направлениями:

вектор <- c («Юг», «Север», «Восток») </strong>

И мне нужно создать новый вектор для каждого направления и назвать 3 новых вектора после каждого направления. Итак, я ожидал, что logi c ниже сработает:

for (i in 1: length (vector) {data. vector [i] <- c ( 1: 3) </strong>

И это создаст 3 вектора (data.South, data.North и data.East), все 3 равны (1,2,3).

К сожалению, это не работает, поскольку ссылка на вектор vector [1] считывается R как несуществующий фрейм данных:

Ошибка в data.vector [1] <- "Position ": object 'data.vector' не найден </strong>

Можно ли его закодировать и создать 3 новых вектора?

Большое спасибо!

Ответы [ 2 ]

2 голосов
/ 28 мая 2020

Один подход, очень похожий на тот, который вы запрашиваете, - это assign:

for(i in seq_along(vector)){
assign(vector[[i]],data.frame())
}
ls()
[1] "East"             "North"             "South"

Другой подход - создать объект списка, каждый элемент которого data.frame, например:

lapply(vector, function(x){setNames(data.frame(x),x)})
[[1]]
  South
1 South

[[2]]
  North
1 North

[[3]]
  East
1 East
1 голос
/ 28 мая 2020

Если вы хотите создать пустые фреймы данных с именами в vector, одним из способов будет:

list_data <- setNames(replicate(length(vector), data.frame()), 
                      paste0('data.', vector))
list2env(list_data, .GlobalEnv)

Однако рассмотрите возможность использования списков (list_data), поскольку ими легче управлять и загрязнять глобальную окружающую среду.

...