我的问题是这是否可行。给出一个列表
lst <- list(a = 1, 2)
可以让with(lst, a)
返回第一个元素。但是你可以使用with
返回第二个元素而不先命名吗?
不能工作:
with(lst, [[2]])
with(lst, `2`)
with(lst, ..2)
我怀疑这是不可能的,因为with(lst, ls(all.names = TRUE))
仅提供"a"
。但有人知道不同吗?
我意识到为什么with(lst, 2)
永远无法奏效。当然[[
是一个函数,所以很明显我的第一次尝试会混淆R.但是,with
为未命名的参数赋予特殊名称是可行的,这样它们就可以在没有单独重新访问列表。例如,可以在..2
设置的环境中将第二个元素称为with
。但事实并非如此。
在这个例子中,人们只需使用lst[[2]]
。但我正在思考一个大型多级列表的复杂表达式,其中一些元素被命名而其他元素则没有。使用with
语句从方便的子集化级别开始,代码将更具可读性。但是,一些未命名的元素是一个障碍。
答案 0 :(得分:2)
不,这是不可能的。您无法从列表中引用未命名的对象。
lst <- list(a = 1, 2)
这是with
的作用:
eval(substitute(a), lst, enclos = parent.frame())
#[1] 1
lst
内可访问的唯一对象是a
:
eval(substitute(ls()), lst, enclos = parent.frame())
#[1] "a"
我建议命名列表的所有组件。 (说实话,我并没有真正看到一个常见的用例。)