Как я могу использовать прогноз() с newdata = var_i?

Я имею дело с большими данными, которые я разбил на куски, чтобы ими можно было управлять с помощью оперативной памяти, примерно так: (это пример, у меня больше кусков)

var_1<-all_modell [c(1:150000)     ,]; save(var_1,file="~/var_1.Rdata");rm(var_1);
var_2<-all_modell [c(150001:300000),]; save(var_2,file="~/var_2.Rdata");rm(var_2);
var_3<-all_modell [c(300001:450000),]; save(var_3,file="~/var_3.Rdata");rm(var_3);

Идея состоит в том, что на каждой итерации загружается фрагмент, используется для прогнозирования, а затем стирается, поэтому оперативная память может свободно обрабатывать следующий фрагмент:

for (i in 1:n_chunks)
{
name<-sprintf('var_%i',i); path<-sprintf('~/var_%i.Rdata',i)
load(path)
predicted     <- predict(Model, newdata =name, type = "prob") #here is the problem
value         <- as.numeric(lapply(predicted,"[[",2))
namef         <- sprintf('~/predicted%i.Rdata',i)
save(value,file=namef)
rm(list= ls()[!(ls()%in% Model)])
}

Я хотел бы знать, как я могу передать newdata=name, где имя меняется... Я также пробовал это, но это не сработало:

predicted <- predict(Model, parse(text=sprintf(sprintf('newdata=var_%i',i))), type="prob")


person Soly    schedule 08.03.2013    source источник
comment
Используйте newdata=get(name) - это может сработать.   -  person Andrie    schedule 08.03.2013
comment
так просто, спасибо все получилось :)   -  person Soly    schedule 08.03.2013


Ответы (2)


Используйте get() для этого. Вот минимальный пример:

x <- 1:100

x_1 <- x[1:50]
x_2 <- x[51:100]

for(i in 1:2){
  var <- sprintf('x_%i',i)
  print(sum(get(var)))
}

Это приводит к:

[1] 1275
[1] 3775

Подробнее см. ?get.

person Andrie    schedule 08.03.2013

Возможно, было бы немного чище использовать отдельную среду для хранения ваших фрагментов вместо использования get (хотя get — это простой ответ, и он является частью FAQ 7.21).

Возможная модификация вашего кода:

myenv <- new.env()

for (i in 1:n_chunks) {
  name<-sprintf('var_%i',i); path<-sprintf('~/var_%i.Rdata',i)
  load(path, env=myenv)
  predicted     <- predict(Model, newdata =myenv[[name]], type = "prob")
  value         <- as.numeric(lapply(predicted,"[[",2))
  namef         <- sprintf('~/predicted%i.Rdata',i)
  save(value,file=namef)
  rm(list= ls(env=myenv), envir=myenv)
}
person Greg Snow    schedule 08.03.2013