我正在处理一个大块的数据,这些数据是我在块中拆分的,所以它可以通过ram来管理,如下所示: (这是一个例子,我有更多的块)
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);
这个想法是每个迭代加载一个块,用于预测然后擦除,因此ram可以自由处理下一个块:
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")
答案 0 :(得分:1)
使用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
。
答案 1 :(得分:0)
使用单独的环境来保存您的块而不是使用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)
}