好的,所以我正在运行一些循环来处理存储在列表对象中的数据。永远铭记那些臭名昭著的人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(...)) 通常不是最优的 https://stackoverflow.com/questions/11025031/r-evalparse-is-often-suboptimal ?
Using get
and [[
:
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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)