У меня есть переменные в год, которые я хочу сохранить на диск, чтобы получить позже. Пример:Ввод переменных в список, а затем их возврат
Yr.data <- list()
#Year 1
a <- "Year 1"
b <- 72
c <- matrix(1, nrow=2, ncol=2)
Yr.data[[1]] <- list(a=a, b=b, c=c)
#Year 2
a <- "Year 2"
b <- 99
c <- matrix(3, nrow=2, ncol=2)
Yr.data[[2]] <- list(a=a, b=b, c=c)
save (Yr.data, file="Yr_data.Rda")
rm(a,b,c,Yr.data)
Позже я хочу, чтобы получить эти переменные обратно, всего за один год (второй год в примере):
load("Yr_data.Rda")
# Here I want to "unlist" Yr.data[[2]], so I get a, b, c as separate variables
print(b)
[1] 99
c <- Yr.data[[2]]$C# I know this is a way to do it, but I want it automatically
Есть умный способ сделать это? И сохранить переменные без необходимости писать a = a и т. Д. И без специального указания переменных для выхода. Реальные данные, которые я хочу сэкономить в год, намного сложнее (пространственные объекты, dataframes и т. Д.). Я думаю, что решение прост, но как-то я застрял в поиске ...
Спасибо.
/Chris
Update: Спасибо за усилия, чтобы помочь, я действительно ценю это. Я понимаю, что описание проблемы недостаточно ясное. Для каждого года (и точек измерения) у меня есть, например, переменные b и c (но с разными значениями в год и точками измерения). Эти значения мне нужно сохранить на диск для последующей обработки. b может быть, например, список() или SpatialPolygonsDataFrame [] (не уверен, как поместить это в базу данных). У меня есть другие R-скрипты для обработки переменных b и c. Сложность заключается в том, что я хочу несколько раз сохранять «b» в одном файле. Так я думал, что это был умный, чтобы поставить его в списке:
Yr.data <- list()
b <- 17
Yr.data[[1]] <- list(b=b)
b <- 42
Yr.data[[2]] <- list(b=b)
b <- Yr.data[[1]]$b # b becomes 17
# Or this, in case I need to analyze the second year
b <- Yr.data[[2]]$b # b becomes 42
Этот код делает это, но я надеялся узнать более надежный способ сделать это в случае, если позже добавить больше переменных (например, д < - 34 года и год < - 43 второй год).
Обновление 2: Приносим извинения за непонимание достаточно ясно. Я не хочу тратить время. Позвольте мне попробовать в последний раз.
У меня есть R-скрипт, обрабатывающий входные переменные a, b, c. В моих примерах эти переменные просты, но на самом деле они являются более сложными объектами, такими как sp :: SpatialPolygonsDataFrame, поэтому я не могу поместить их в dataframes. Иногда мне нужно обрабатывать один набор переменных, иногда другой. Я думал, что это хорошо, чтобы сохранить эти различные наборы как списки в списке, так что если я хочу работать с первым набором, я выбираю первый список в списке списков:
Year.I.need.to.analyze <- 1
getAllVariablesInList(Yr.data[[Year.I.need.to.analyze ]]) # creates a, b, c
result.I.want <- b * c
И когда мне нужно проанализировать второй год, мне просто нужно изменить «Year.I.need.to.analyze» на 2 и снова запустить скрипт. Я бы предпочел не сохранять каждый набор в отдельном .Rda-файле, чтобы избежать «greping» и «paste(): ing» на имена файлов и каталогов, а также избегать отслеживания файлов и т. Д.
Я знаю, что пример прост, но реальный сценарий должен прыгать между годами, создавать и экспортировать графики между ними и т. Д. Я надеялся максимально автоматизировать все это. Снова извините за путаницу. Спустя несколько часов, пытаясь исправить это, я понимаю, что, возможно, слишком устал, чтобы наилучшим образом объяснить этот вопрос.
'сохранить (а, б, в, файл = "Yr1_data.Rda")', и т.д.? Я не могу сказать, что вы здесь делаете. – joran
Извините, я должен был упомянуть по соображениям надежного кода. Я хочу, чтобы все годы в одном файле. Мне нужно сохранять данные в течение многих лет. – Chris
Я бы предпочел использовать среду вместо списка, но это было бы совсем не так. например 'e <- as.environment (Yr.data, recursive = FALSE); Ls (е); е $ с; с (e, b); get ("c", pos = e) ' – GSee