2016-05-20 46 views
0

我是很新,R和這個問題可能聽起來不可思議。我有在第一列其他data.frames的名稱的data.frame:如何在data.frame的名稱保存在data.frame中時訪問data.frame的數據?

> data 
    tablename avg_size 
1  ttest  5000 
2 testsheet 15000 
5 ttest2 15000 
6 mtcars 13000 

然後我希望做的是什麼獲取表(它們是data.frames)的名稱並在這些data.frames上運行一些函數。比如我想獲得的NAS總和每個表中這是可能的使用

missing_values <- sum(is.na(eval(as.name(as.vector(data[1]))))) 

我的問題是, 1)這看起來有點太複雜了,我覺得有可能是更好的解決方案? 2)有了其他功能,我遇到了麻煩,例如

infinite_values <- sum(is.infinite(as.numeric(eval(as.name(as.vector(data[1])))))) 

這不起作用,插入「as.numeric」沒有幫助。

有人可以幫忙嗎?編輯: 感謝您的答案,迄今爲止!我都嘗試

infinite_values <- sum(is.infinite(as.numeric(eval(as.name(as.vector(data[1])))))) 

 obg <- mget(as.character(data[,1])) 

但它返回 「錯誤:未找到值''ttest''」 由於此解決方案似乎適用於您,我可能做錯了什麼?總結邏輯值的時候,雖然使用不公開或者as.vector可以幫助

lapply(mget(as.character(data[,1])), function(x) sum(is.na(x))) 

你不應該需要as.numeric:

lapply(mget(as.character(data[,1])), function(x) sum(is.infinite(unlist(x)))) 

我把作爲

+0

我想我至少檢測到一個問題,「mtcars」處於不同的環境中,因此無法通過mget找到。現在和unlist()似乎工作。謝謝! – mariego

回答

2

爲什麼不使用MGET和lapply 。字符在那裏,以避免可能的問題,以字符輸入的默認解釋爲因素。

+0

應該是'as.character(data [,1])'而不是'as.character(data [1])'。也可以首先將所有表格作爲列表,以便在應用不同的計算時有更大的靈活性。 –

+0

不,實際上data [,1]和data [1]對於數據幀是相同的。我想'mget'(也是'lapply')返回列表,所以我不明白你的建議的其他部分。等一下。也許你是在暗示我們將結果分配給「table_list」? –

+0

我正在寫一個答案,當我看到你的帖子時停下來。無論如何,如果我把'df < - data.frame(tablename = c(「iris」,「mtcars」),avg_size = c(5000,13000))'','as.character(df [,1] )'returns' [1]「iris」「mtcars」',而'as.character(df [1])'返回'[1]「1:2」'。不知道爲什麼太... –