快速問題......無論如何,我可以通過一些對象循環並對每個對象應用一個函數?通過ls()或對象()循環?
當我輸入ls()
或objects()
時,它返回一個對象名稱列表。我想遍歷這個列表,找出那些是data.frame
,然後對每個對象運行一個函數。
如何通過函數從ls
或objects
傳遞條目?
道歉,如果這似乎是一個愚蠢的問題...
謝謝!
快速問題......無論如何,我可以通過一些對象循環並對每個對象應用一個函數?通過ls()或對象()循環?
當我輸入ls()
或objects()
時,它返回一個對象名稱列表。我想遍歷這個列表,找出那些是data.frame
,然後對每個對象運行一個函數。
如何通過函數從ls
或objects
傳遞條目?
道歉,如果這似乎是一個愚蠢的問題...
謝謝!
通過@jverzani約搞清楚哪些對象給出的答案是數據幀還是不錯的。所以讓我們從這個開始。但是我們只想選擇data.frames的項目。所以我們能做到這一點是這樣的:
#test data
df <- data.frame(a=1:10, b=11:20)
df2 <- data.frame(a=2:4, b=4:6)
notDf <- 1
dfs <- ls()[sapply(mget(ls(), .GlobalEnv), is.data.frame)]
的名稱的數據幀的現在在DFS字符串對象,以便可以將其傳遞給其他的功能,像這樣:
sapply(dfs, function(x) str(get(x)))
我用get()
命令實際上通過名稱獲取對象(請參閱R FAQ瞭解更多信息)
我已經回答了上面的問題,但我有一個懷疑,如果您要組織數據框架到列表項中,您的代碼將更加易讀易維護。很顯然,我不能肯定地說這個,但是我不能提出一個用例,它遍歷所有查找數據框的對象優於將數據框保存在列表中,然後調用該列表中的每個項。
謝謝!這正是我正在尋找的! -rb – Ray 2011-04-26 22:43:51
您可以使用get或mget從名稱中獲取對象,並使用其中一個應用類型函數進行迭代。例如,
sapply(mget(ls(), .GlobalEnv), is.data.frame)
會告訴您全局環境中的哪些項目是數據框架。要在函數中使用,您可以爲ls調用指定一個環境。
可以使用功能get()
通過名字來引用一個對象
# Create some objects
df <- data.frame(a=1:10)
dl <- list(a=1, b=2, c=3)
# Use `ls()` to return a list of object names
lso <- ls()
# Use `get()` to refer to specific objects
class(get(lso[1]))
[1] "data.frame"
# Using an apply function to evaluate the class
lapply(lso, function(x) class(get(x)))
[[1]]
[1] "data.frame"
[[2]]
[1] "list"
使用inherits
投擲混合物的另一種解決方案。它基本上(a)從當前環境獲取所有對象,並且(b)檢查它們是否從數據框繼承。
sapply(sapply(ls(), get), inherits, 'data.frame')
您可以使用「eapply」循環環境中的對象。
我問了一個幾乎相同的問題[這裏](http://stackoverflow.com/questions/5158830/identify-all-objects-of-given-class-for-further-processing)。那裏的答案對我來說運作得很好。 – Chase 2011-04-26 21:22:19