20

さて、リストオブジェクトに格納されているデータを処理するためにいくつかのループを実行しています。fortune使用しないという悪名高い警告を常に念頭に置いてeval(parse(mystring))、私はこれを思いついた:

Rgames> bar
$foo
$foo$fast
[1] 1 2 3 4 5

$foo$slow
[1]  6  7  8  9 10


$oof
$oof[[1]]
[1]  6  7  8  9 10

$oof[[2]]
[1] 1 2 3 4 5


Rgames> rab<-'bar'
Rgames> do.call('$',list(as.name(rab),'oof'))
[[1]]
[1]  6  7  8  9 10

[[2]]
[1] 1 2 3 4 5

通常、私はリスト(そのbarうちの1つ)を選択してから、データを含むリストの1つの要素(たとえば oof)を選択します。上記のコードは、と同じことを行いeval(parse(text=paste(rab,'$','oof',sep='')))ます。安全メカニズムとして表記
ではなくリストの名前を使用したいので、これをすべて実行しています(すべてのリストオブジェクトの内容が同じ順序であるとは限らないため)。[[x]]

RのDWinからのアドバイスに固執する必要があります:eval(parse(...))はしばしば最適ではありませんか?

4

2 に答える 2

19

getおよびを使用する[[

bar <- list(foo = list(fast = 1:5, slow = 6:10),
            oof = list(6:10, 1:5))

rab <- 'bar'

get(rab)[['oof']]
# [[1]]
# [1]  6  7  8  9 10
# 
# [[2]]
# [1] 1 2 3 4 5
于 2012-11-30T14:33:25.770 に答える
4

トップリストの名前が変更され、その名前の変数によってアクセスされる場合は、それらのリストを別のリストに配置するのが最善です。次に、を使用して目的のリストにアクセスできます[[fortune(312)また、のヘルプをお読みください?'[['

その後、さまざまな方法でピースにアクセスできます(詳細はヘルプページを参照?'[[')。

mylist <- list()
mylist$bar <- bar

mylist[[rab]][['oof']]
#or
mylist[[ c(rab,'oof') ]]
于 2012-11-30T17:20:27.893 に答える