我尝试从包含此对象的列表中获取对象的名称。我搜索了类似的问题,并找到了一些关于使用deparse(substitute(object))
公式的建议:
> my.list <- list(model.product, model.i, model.add)
> lapply(my.list, function(model) deparse(substitute(model)))
结果是:
[[1]]
[1] "X[[1L]]"
[[2]]
[1] "X[[2L]]"
[[3]]
[1] "X[[3L]]"
而我想获得:
[1] "model.product", "model.i", "model.add"
提前感谢您的帮助!
答案 0 :(得分:7)
您可以编写自己的list()
函数,使其行为类似data.frame()
,即使用未评估的arg名称作为条目名称:
List <- function(...) {
names <- as.list(substitute(list(...)))[-1L]
setNames(list(...), names)
}
my.list <- List(model.product, model.i, model.add)
然后你可以通过以下方式访问这些名字:
names(my.list)
答案 1 :(得分:2)
names(my.list) #..............
哦,等等,你真的没有创造名字吗?列表功能实际上没有“内存”。它返回一个列表,其中包含参数的值,但不会从它们的来源返回,除非您将名称添加到作为参数给出的pairlist中。
答案 2 :(得分:1)
创建my.list
后,您将无法以这种方式提取信息。
R
的基本方式是表达式在需要之前不会被评估;使用deparse(substitute())
只能在计算表达式之前使用。所以:
deparse(substitute(list(model.product, model.i, model.add)))
应该有效,而你的则没有。
答案 3 :(得分:1)
为了节省填充,您可以使用mget
将自由浮动变量收集到包含以下名称的列表中:
one <- two <- three <- 1
result <- mget(c("one","two","three"))
result
#$one
#[1] 1
#
#$two
#[1] 1
#
#$three
#[1] 1
然后你可以关注@Ddin的建议:
names(result)
#[1] "one" "two" "three"