【发布时间】:2012-11-18 18:45:42
【问题描述】:
好的,所以我正在运行一些循环来处理存储在列表对象中的数据。记住臭名昭著的 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(...)) is often suboptimal 中的建议吗?
【问题讨论】:
标签: r parsing expression eval interpreter