2016-09-19 2 views
0

データフレームのリストを作成するRでコードを書いています。実行中は、作成した各データフレームを別のタブに表示する必要があります。データフレームやリストは、両方の線に沿って、ループのために、いくつかのネストされたことにより、作成されます。変数名を動的に変更せずにリストからデータを表示する

df.list <- vector("list", length(e)) 
i <- 1 
for (...){ 
    data <- as.data.frame(stuff) 
    j <- 1 
    for (...){ 
    for (...){ 
     [loop stuff] 
     data[j,] <- [more stuff] 
    } 
    } 
    df.list[[i]] <- data 
    i <- i + 1 
} 

質問は、「ビュー」機能を置く場所です。最後にリストを通ってデータフレームを表示する2番目のループを追加すると、それらはすべて "df.list"という名前になります。 df.list [[i]] < - dataの直前にView(データ)を置くと、それらはすべて "data"という名前になります。それらのすべてが同じ名前を持つことは、この文脈にとって許容可能な状況ではありません。理想的には、私が望むどんな文字列でも名前を付けることができますが、他のデータフレームと合理的に理解でき、区別できるものは解決します。

変数名を動的に変更して、リストインデックスであるdataiにすることで解決できることはわかっていますが、これはほとんど常に間違ったやり方です。

+0

'df.list'には「名前」がありますか?私が何か不足している場合を除き、あなたは 'for(nm in names(df.list))View(df.list [[nm]]、nm)'やループの中で 'i'の名前にアクセスする/それを 'View'に渡します。 –

+0

いいえ、あなたはまったく正しいです。何とか私はあなたがビュー(データ、名前)を呼び出すことができるという事実を忘れてしまった。私はView関数が名前引数を取らないと思った。これを答えとして書くと私はそれを受け入れます。 –

答えて

1

はので、私は閉じることができます:

を見る()関数は、オプションの引数として名前を取ります! View(data, name)dataを表示し、タブを呼び出しますname

2

私はeval(parse())を使用して答えを投稿しませんだろうと思ったが、それは私がこの仕事をするために考えることができる唯一の方法です:

# sample data 
df.list = list(mtcars, iris) 
# name your list however you want the tabs to be named 
names(df.list) = c("mtcars data", "this is iris") 

for (i in seq_along(df.list)) eval(parse(text = sprintf("View(df.list[['%s']])", names(df.list)[i]))) 

これは、あなたが「動的に変数名を変更することにより、どのような意味があります私がリストのインデックスであるところのデータであること」と、私はそれがほとんど常に間違っていることに同意します。この場合でも、これを行うのが最も便利な方法かもしれません。コメントから解決策を投稿

+0

これは、私が思いついたのとほぼ同じです。私はこれがあなたのやり方であることを私に吹き飛ばしています...私は他の方法、便宜的にも考えてもいけません。 –

+0

私は誰かが良いアイデアを持っていることを望んでこれをしばらく開いたままにします。 –

+1

私は誰かが願っています! – Gregor

関連する問題