gpt4 book ai didi

string - 自动将变量名称添加到列表的元素

转载 作者:行者123 更新时间:2023-12-01 16:03:11 25 4
gpt4 key购买 nike

我有一个模型列表,并且为了使代码更易于维护(因此难以添加和删除模型),我希望有一个单独的位置来存储它们及其名称。为此,我必须解决以下命名问题。

上游,我生成的模型效率低于以下方式(如果它是这样压缩的,我会将它们分配到他们自己的env)。

lmNms <- c( "mod1", "mod2", "mod3", "mod4", "mod5", "mod6")
lapply(lmNms, function(N) assign(N, lm(runif(10) ~ rnorm(10)), env = .GlobalEnv))

在下游,我已经把乱七八糟的东西收集到一个列表中:

modelList <- list(mod1, mod2, mod3, mod4, mod5, mod6)

我有一个(未命名的)变量输出列表,并附上如下名称:

output <- list(1, 2, 3, 4, 5, 6)
names(output) <- lmNms

我希望能够使用 modelList 中的模型名称:

modelList <- list(mod1, mod2, mod3, mod4, mod5, mod6)
names(output) <- someFun(modelList)

我确定存在 someFun -- 但我无法弄清楚...可以这样做吗?

明确地说,这样做的目的是不使用使用 lmNms -- 我想从 modelList 或让它们附加在我构建 modelList 的位置(重点是避免 list(a = a, b=b ...) 样板。

最佳答案

这样做的关键是,当您不提供名称时,重新制作列表功能以粘贴名称。

listN <- function(...){
anonList <- list(...)
names(anonList) <- as.character(substitute(list(...)))[-1]
anonList
}

有了这个,你制作 modelList 如下:

modelList <- listN(mod1, mod2, mod3, mod4, mod5, mod6)

附上姓名:

R> names(modelList)
[1] "mod1" "mod2" "mod3" "mod4" "mod5" "mod6"

给出了更完整的解决方案here ,这对于在 list 中使用匿名和命名参数的混合是稳健的。

listN2 <- function(...){
dots <- list(...)
inferred <- sapply(substitute(list(...)), function(x) deparse(x)[1])[-1]
if(is.null(names(inferred))){
names(dots) <- inferred
} else {
names(dots)[names(inferred) == ""] <- inferred[names(inferred) == ""]
}
dots
}

关于string - 自动将变量名称添加到列表的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21011672/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com