2015-10-20 55 views
-2

列表我真的没有找到解决方案,即使它似乎很容易,我有一个列表中的数据帧的任何方式如何修改每个数据帧中的R

,和我有一个非常大的代码(这是不仅仅是一个应用或其他,for循环和创建表...),我想要应用于每个数据帧,列表的每个元素,

我想在这个列表上做一个循环,通过数据框浏览它的数据帧,但是如何提取当前元素来处理它呢?

(我的代码是约450线,我只是想,而不是与下一个名称替换数据帧的名称,它只是将自动)

dbR<-list() 
for (i in datedeb:datefin) 
{ 
    sqlst<-paste("SELECT * FROM `cl4d6-2015/09/",sprintf("%02d",i),"`",sep="") 
    nomcl<-paste0("cl",sprintf("%02d",i),sep="") 
    dbR[[nomcl]]<-dbGetQuery(db,sqlst) 
} 


for (i in dbR) 
{ 
    #mycode 
} 
+0

我看不到您的代码将data.frames放入列表中的位置。相反,他们被分配到全球环境中,这是一个错误。关于你的主要问题:'lapply'就是为此而设计的。 – Roland

+0

我认为你不需要'assign('只需将'df'添加到'list'中,例如'dbR [[i]] = dt',那么如果需要的话,你可以添加名字到列表元素'names(dbR)= .. ....' – Batanichek

+0

对不起,我错了,我改正了,所以我的列表dbR确实有日期框架 – Mamoud

回答

0

请看下面的例子代码。

dbR <- sapply(1:30, simplify = FALSE, USE.NAMES = TRUE, FUN = function(i) { 
    dt <- dbGetQuery(db, paste("SELECT * FROM `cl4d6-2015/09/", 
          sprintf("%02d", i), "`", sep = "")) 
    #mycode 
    return(dt) 
}) 

上面的代码将跨越1:30类似于for循环操作,不同之处输出被自动保存为单独的列表条目。我们将数据框列表保存为dbR。您也可以在数据读入后添加在数据框上运行的代码。

sapply()USE.NAMES = TRUEsimplify = FALSE将像lapply一样操作,但保留列表名称/值。

apply功能家族并不总是直观,但它们功能强大而且快速!他们也很容易被翻译成并行操作。我建议让他们舒服。

+0

好吧,我会马上尝试 – Mamoud

+0

我可以用函数(){mycode为每个数据帧},使用前一个数据帧中的对象?这就是为什么我想要一个for循环,所以我可以返回并获取前一个或下一个数据框的变量 – Mamoud

+0

@Mamoud,你可以举一个你想要做什么的例子吗? – ElizabethAB