2015-10-20 56 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