2015-05-20 59 views
2

我有多個數據表,並且都有一個共同的列,名爲ID。我有一個向量vec,其中包含一組ID值。 我想用lapply於子集使用vec 我知道如何使用lapply到子集數據表中的所有數據表,但我的問題是如何分配的子集化的結果返回到原始數據表 這裏是我的嘗試:子集多個數據表使用lapply

tables<-c("dt1","dt2","dt3","dt4") 
lapply(mget(tables),function(x)x[ID %in% vec,]) 

以上提供了所有數據表的子集,但是如何將它們分配回dt1,dt2,dt3,dt4

+2

我認爲'ID'應該是更新原有數據集對象'X $ ID',如果你不重視數據集(附不推薦)。此外,最好將它保留在列表中,而不是在全球環境中有許多對象。如果你堅持,你可以使用'list2env'。它。 'lst < - lapply(mget(tables),function(x)x [ID%in%vec,]); list2env(lst,envir = .GlobalEnv)' – akrun

+0

謝謝akrun,我從來沒有使用過list2env,但似乎正在工作。一個問題:我在一個R閃亮的應用程序中使用它。將列表轉換爲全局環境中的對象 - 是否會干擾其他用戶會話? – Sri

+0

我不理解「其他用戶會話」。在全球環境中擁有大量對象通常是不好的 – akrun

回答

1

我會將數據集保留在列表中,而不是更新全局環境中的數據集對象,因爲大多數操作都可以在列表中完成(包括讀取文件和寫入輸出文件)。但是,如果你堅持,我們可以使用list2env將與子集

lst <- lapply(mget(tables),function(x)x[ID %in% vec,]) 
list2env(lst, envir=.GlobalEnv)