访问 base::with() 中的未命名列表元素
Accessing unnamed list elements inside base::with()
我的问题是这是否可能。给定一个列表
lst <- list(a = 1, 2)
可以将 with(lst, a)
到 return 第一个元素。但是你可以 return 第二个元素使用 with
而不先命名它吗?
无效:
with(lst, [[2]])
with(lst, `2`)
with(lst, ..2)
我怀疑这是不可能的,因为 with(lst, ls(all.names = TRUE))
只给出了 "a"
。但是有谁知道有什么不同吗?
我明白为什么 with(lst, 2)
永远行不通了。当然 [[
是一个函数,所以很明显我的第一次尝试会使 R 感到困惑。但是,with
可以为未命名的参数赋予特殊名称,这样就可以访问它们而无需单独重新访问列表。例如,第二个元素可以在 with
设置的环境中调用 ..2
。但事实并非如此。
在此示例中,只需使用 lst[[2]]
。但是我正在考虑一个大型多级列表的复杂表达式,其中一些元素被命名,而另一些则没有。使用 with
语句从方便的子集级别开始,代码将更具可读性。但是让一些需要的元素未命名是一个障碍。
不,这是不可能的。您不能从列表中引用未命名的对象。
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"
我建议命名列表的所有组件。 (老实说,我真的没有看到一个常见的用例。)
我的问题是这是否可能。给定一个列表
lst <- list(a = 1, 2)
可以将 with(lst, a)
到 return 第一个元素。但是你可以 return 第二个元素使用 with
而不先命名它吗?
无效:
with(lst, [[2]])
with(lst, `2`)
with(lst, ..2)
我怀疑这是不可能的,因为 with(lst, ls(all.names = TRUE))
只给出了 "a"
。但是有谁知道有什么不同吗?
我明白为什么 with(lst, 2)
永远行不通了。当然 [[
是一个函数,所以很明显我的第一次尝试会使 R 感到困惑。但是,with
可以为未命名的参数赋予特殊名称,这样就可以访问它们而无需单独重新访问列表。例如,第二个元素可以在 with
设置的环境中调用 ..2
。但事实并非如此。
在此示例中,只需使用 lst[[2]]
。但是我正在考虑一个大型多级列表的复杂表达式,其中一些元素被命名,而另一些则没有。使用 with
语句从方便的子集级别开始,代码将更具可读性。但是让一些需要的元素未命名是一个障碍。
不,这是不可能的。您不能从列表中引用未命名的对象。
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"
我建议命名列表的所有组件。 (老实说,我真的没有看到一个常见的用例。)