2016-05-20 5 views
0

私は最初の列の他のdata.framesの名前のdata.frameを持っている..私はRにかなり新たなんだと、この質問は奇妙に聞こえるかもしれない: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上でいくつかの関数を実行します。例えば、私は

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

を使用してできた各テーブルには、NASの合計を取得したい私の問題は、これは少しも複雑に見えますし、私はよりよい解決策があるかもしれないと思う)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''の値が見つかりません" このソリューションはあなたのために機能すると思われるので、何が間違っているのでしょうか?

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

が、私はのように置く:非公開にを使用したりas.vectorが役立つかもしれないが、論理名を合計するとき

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

あなたはas.numeric必要はありません。

+0

私は少なくとも1つの問題を検出したと思います。「mtcars」は異なる環境にあり、mgetでは見つかりませんでした。今すぐunlist()で動作するようです。ありがとう! – mariego

答えて

2

なぜないlapply MGETとを使用します.characterは、文字入力のデフォルト解釈を要因として考えられる問題を避けるためにそこにある。

+0

as.character(data [1])の代わりに 'as.character(data [、1])'にする必要があります。また、異なる計算を適用する際の柔軟性を高めるために、最初にすべてのテーブルをリストとして取得します。 –

+0

いいえ、実際にはdata [、1]とdata [1]はデータフレームで同じです。私は 'mget'(そして' lapply')のリストを返すと思いますので、私はあなたの提案の他の部分を理解していません。あ、ちょっと待って。結果を "table_list"に割り当てることを提案しているのでしょうか? –

+0

私はあなたの投稿を見たときに答えを書いて停止しました。とにかく、 'df

関連する問題