Хорошо, поэтому я запускаю некоторые циклы для обработки данных, хранящихся в объектах списка. Всегда помня о печально известном предостережении 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
- один такой), а затем один элемент списка (например, oof
), который содержит мои данные. Приведенный выше код делает то же самое, что и eval(parse(text=paste(rab,'$','oof',sep='')))
.
Я делаю все это специально, потому что я хочу использовать имена списков, а не [[x]]
обозначение как механизм безопасности (потому что не все объекты списка имеют свое содержимое в том же порядке). Должен ли я придерживаться совета DWin в R: eval (parse (...)) часто субоптимально?