#r #list #dataframe #dictionary
#r #Список #фрейм данных #словарь
Вопрос:
В Java и Python я обнаружил, что работа с картами и словарями является очень удобным способом одновременной обработки разных фреймов данных. Будучи R-новичком, я попытался использовать этот подход для хранения «частей» одного большого фрейма данных, который я индексирую, используя значения («интервалы») из tlist. К моему удивлению, следующий код не сработал, и я не нахожу решения, почему:
library(hash)
df <- read.csv("(/testfile.csv")
tlist <- list(5, 30, 60, 90, 180, 356)
data_map <- hash()
for(t in 2:length(tlist)){
data_map[[paste0("T", t)]] <- df[df$T >= tlist[[t-1]] amp; df$T <= tlist[[t]], ]
}
data_map[["T1"]] #calling dataframe t1 out of the map
При вызове элементов моей data_map, как в последней строке, я получаю null и не понимаю, почему. Может кто-нибудь дать мне некоторое представление о том, почему заполнение хэша в этом конкретном вопросе не работает? Любая помощь приветствуется, заранее спасибо.
Ответ №1:
Вы уверены, что вам нужен хэш? В большинстве случаев списков достаточно. Вы можете использовать что-то вроде этого.
tlist <- c(5, 30, 60, 90, 180, 356)
data_map <- vector('list', length(tlist)-1)
for(t in seq_along(tlist)[-1]) {
data_map[[t-1]] <- df[df$T >= tlist[t-1] amp; df$T <= tlist[t], ]
}
затем доступ к отдельным значениям с data_map[[1]]
data_map[[2]]
помощью и т.д.
Вы можете назначать имена с помощью
names(data_map) <- paste0('T', seq_along(data_map))
Комментарии:
1. Я понимаю вашу точку зрения. Но допустим, у меня был бы второй (вложенный) цикл, перебирающий новый «slist». В конце я хотел бы вызвать некоторый элемент списка с помощью команды data_map[[«T1S3»]] . Тогда этот подход к динамическому присвоению имени моему списку не сработает, верно?
2. Мы можем изменить код на основе того, что вы хотите. Вы можете назвать свои элементы списка внутри цикла, или могут быть и лучшие подходы. На самом деле вы не делились никакими данными, поэтому трудно дать вам точные рекомендации.