Я создал иерархию списка, и теперь я пытаюсь поместить фреймы данных в эти списки, но я не уверен в синтаксисе, который позволяет мне помещать фрейм данных в список.
По сути, я пытаюсь получить следующее:
PlanetList[["Mars"]][["Mars vs Venus"]]["PlanetDataFrame"] <- CurrentDataFrame
Что идет хорошо, при условии, что я запустил цикл один раз, чтобы он не прошел, но все еще применяет фрейм данных кCurrentDataFrame
переменная, с которой я могу связываться.
Но в моем цикле for вот так:
PlanetList[[Planets[i]]][[vsList]]["PlanetDataFrame"] <- CurrentDataFrame
На самом деле моя таблица данных не применяется к нужной папке, на самом делеиз того, что я могу сказать, это создание нового и запись в это.
Я не могу понять, что изменить, но я предполагаю, что приведенная выше строка кода является сутью моей проблемы.
Вот полный цикл for:
for(i in 1:length(Planets)) {
for(j in 1:length(Planets)) {
#here I create the 'X vs Y' (e.g. Mars vs Venus) variable to
#direct my newly retrieved data frame into the correct sublist
#later on
vsList <- paste0(Planets[i], ' vs ', Planets[j])
#obviously - file path. All good here.
FilePath <- file.path(paste0(SourceDir, '/', Planets[i]))
#get my data frame full of exciting numbers
PlanetDataFrame <- read_delim(file.path(paste0(FilePath, "Correlations_file_for_", Planets[i], '_vs_', Planets[j], '_threshold_0.0.txt')), ' ', trim_ws = TRUE, col_names = FALSE)
#put that data frame in a corresponding list (or not)
PlanetList[[Planets[i]]][[vsList]]["PlanetDataFrame"] <- PlanetDataFrame
}
}
Дополнительная проблема: Мало того, что это создает новый список полностью и игнорирует те, которые я уже сделал, но я также получаю следующее предупреждение:
number of items to replace is not a multiple of replacement length
Я сделал этот список иерархическим, используя следующую:
Planets = c('Mercury', 'Venus', 'Earth', 'Mars', 'Jupiter', 'Saturn', 'Uranus', 'Neptune')
DataSets <- c('PlanetDataFrame', 'PlanetMatrix', 'PlanetTable')
PlanetList <- lapply(Planets, function(el_PlanetList_outer) {
## create a list with |Planets| elements
## this we do by creating first an inner list vector(.)
## and the repeating it |Planets| times
ret <- rep(tibble(setNames(vector("list", length(DataSets)),
DataSets)),
length(Planets))
setNames(ret, ## ret has no proper names yet
paste(el_PlanetList_outer, " vs ", Planets))
})
names(PlanetList) <- Planets ## could have been done with setNames as well
str(PlanetList)
Я думал, что указание 'tibble', а не 'list' (6-я строка текста в приведенном выше блоке) позволит мне поместить туда фрейм данных?
Iпрошу прощения, поскольку это, возможно, теперь превратило этот вопрос в нечто вроде гидры, которая не была моей первоначальной целью.
Так что, в надежде, вся информация, необходимая, чтобы помочь мне, представлена выше, и с риском длятратить еще несколько сотен битов:
Все, чего я пытаюсь добиться, - это получить файл, подобный следующему:
Correlations_file_for_Saturn_vs_Mercury_threshold_0.0.txt
, а затем аккуратно вставить его в правильный список / подсписок:
PlanetList > Saturn > Saturn vs Mercury > PlanetDataFrame
Сокращенный вид моего файла hieraRCHY показывает первую планету:
Planet List -
|
|-- Mercury -
| |
| |-- Mercury vs Venus -
| | |
| | |--PlanetDataFrame
| | |
| | |--PlanetMatrix
| | |
| | |--PlanetTable
| | |
... ... ...