【发布时间】:2018-04-16 09:23:33
【问题描述】:
我正在考虑将我的问题的数据(向量、列表等)和代码(函数)保存在树结构中(...的列表列表)。我不想为根节点指定名称,也不想为下一级节点指定名称。根节点下方的列表是彼此的不同版本,我希望能够以不同的方式比较它们,并以不同的方式构建它们,并赋予它们不同的任意名称。我目前正在使用以下内容来构建整体结构:
foo <- function(ref.txt, val.txt) eval(parse(text=paste0(ref.txt, ' <<- ', val.txt)))
一个简单的例子可能是:
root = list()
foo('root$v1', '42')
foo('root$v2', '43')
root
# $v1
# [1] 42
#
# $v2
# [1] 43
稍微不那么琐碎,继续上一个示例:
v3 <- c(42, 43)
foo('root$v3', 'v3')
root
# $v1
# [1] 42
#
# $v2
# [1] 43
#
# $v3
# [1] 42 43
同样,我不能硬编码,例如root$v3 <- v3,因为直到运行时我才知道列表根的名称或下一级节点的名称。
我要求替代方案的部分原因是 @'Joris Meys 在 Stack Overflow 文章“Why doesn't assign() values to a list element work in R?”中的评论,他显然引用了 Lumley 的帖子“Re: [R] RE: Using a number as a name to access a list”。这些建议避免使用parse。但是,如果我直到运行时才知道名称,甚至不知道 path 的深度(请参阅 Lumley),如何避免 parse 可能?
【问题讨论】:
-
您只需使用
[[而不是$,您不需要解析任何内容。请参阅fortune::fortunes(312)和fortune::fortunes(343)。我建议这本质上是 Dynamically select columns using$and a vector of column names 的副本——你只是碰巧使用的是列表而不是数据框。
标签: r list parsing tree assign