![](/img/trans.png)
[英]I want my selectInput to show list of dataframes in my global environment
[英]How can I make a list of all dataframes that are in my global environment?
我試圖在他們身上使用rbind
。 但是我需要一個已經存在於我的全局環境中的所有dataframes
的列表。 我該怎么做?
代碼我用來導入目錄中的20個csv文件。 基本上,必須組合成單個數據幀。
temp = list.files(pattern = "*.csv")
for (i in 1:length(temp)) assign(temp[i], read.csv(temp[i]))
此函數應返回一個包含所有data.frames作為元素的正確列表
dfs <- Filter(function(x) is(x, "data.frame"), mget(ls()))
然后你可以用它們來對抗它們
do.call(rbind, dfs)
當然,這是非常愚蠢的,有一堆data.frames躺在附近被如此相關,使得你要的rbind
他們。 聽起來他們可能應該首先列入清單。
我建議你遠離assign()
,這總是一個跡象,事情可能會發生沖突。 嘗試
temp <- list.files(pattern="*.csv")
dfs <- lapply(temp, read.csv)
應該立即返回一個列表。
從您發布的代碼中,我建議您啟動一個新的R會話,並使用以下代碼再次讀取文件
do.call(rbind, lapply(list.files(pattern = ".csv"), read.csv))
這是MentatOfDune的答案略有改進,它沒有捕獲具有多個類的data.frames:
ls()[grepl('data.frame', sapply(ls(), function(x) class(get(x))))]
ls
函數列出了環境中的所有內容。 get
函數獲取具有給定名稱的變量。 您可以使用class
函數來獲取變量的類。
如果你把它們放在一起,你可以這樣做:
ls()[sapply(ls(), function(x) class(get(x))) == 'data.frame']
這將返回當前環境中data.frames的字符向量。
如果在全局環境中只有data.frames具有相同數量的列和列名,則以下內容應該有效(非data.frame對象無關緊要):
do.call(rbind, eapply(.GlobalEnv,function(x) if(is.data.frame(x)) x))
為了改善MentatOfDune的答案(順便說一句好的用戶名):
ls()[sapply(ls(), function(x) any(class(get(x)) == 'data.frame'))]
甚至更強大:
ls()[sapply(ls(), function(x) any(is.data.frame(get(x))))]
這也支持tibbles(例如用dplyr
創建),因為它們包含多個類,其中data.frame
就是其中之一。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.