Как сохранить массивы разной длины в переменную массива списка в R - PullRequest
0 голосов
/ 04 января 2012

Я хочу использовать список для сохранения двух массивов одинаковой длины. Один массив (folders) содержит имена папок, а другой (files) содержит массивы имен файлов, которые могут иметь различную длину.

mvExp = list(
    folders     = NULL,
    files       = NULL
)

mvExp$folders[1] = "../data_america/"
mvExp$files[1]  = c("file1.dat")

mvExp$folders[2] = "../data_europe"
mvExp$files[2]  = c("file1.dat", "file2.dat", "file3.dat")

Когда я пытаюсь добавить массив имен файлов во второе поле массива «файлы», я получаю предупреждение, в котором говорится, что число элементов, которые я хочу добавить, слишком велико. «file2.dat», «file3.dat» не сохраняются в mvExp$files[2].

Как сохранить массивы различной длины в списке?

Я также пытался использовать «data.frame» (поскольку мои два массива имеют одинаковую длину), но я не смог добавить элементы в data.frame.

Ответы [ 2 ]

2 голосов
/ 04 января 2012

Принимая во внимание, что mvExp$folders может быть простым символьным вектором (содержащим одну строку для каждой папки), mvExp$files должен быть списком, так что некоторые из его элементов могут сами содержать несколько элементов (т.е.файлы в каталоге).

Чтобы он работал, вашему коду необходимо внести два изменения:

  • file необходимо «инициализировать» в виде списка.

  • Чтобы назначить новые элементы в списке, используйте оператор "[[<-" вместо оператора "[<-".

.

mvExp = list(
    folders     = character(),
    files       = list()
)

mvExp$folders[1] <- "../data_america/"
mvExp$files[[1]] <- c("file1.dat")

mvExp$folders[2] <- "../data_europe"
mvExp$files[[2]] <- c("file1.dat", "file2.dat", "file3.dat")
1 голос
/ 04 января 2012

Вы можете хранить все в одном списке.

myExp <- list(
  `../data_america` = "file.dat",
  `../data_europe`  = c("file1.dat", "file2.dat", "file3.dat")
)

Извлечь имена папок, подобные этому

names(myExp)

, и файлы для данной папки, например,

myExp[["../data_america"]]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...