gpt4 book ai didi

r - 从传递给函数内部函数的列表中获取参数

转载 作者:行者123 更新时间:2023-12-01 13:48:58 25 4
gpt4 key购买 nike

我想在模型列表上应用一个函数。我想通过将模型名称放在输出之前来组织输出。这是一个(非常)简化的示例,使用基于 this r-help threadmatch.call() :

x   <- rnorm(10)
y <- rnorm(10)
mod <- lm(y~x)
fun <- function(model){
name <- as.character(match.call()[[2]])
p <- summary(model)$coefficients[2,4]
return(paste(name, "; p =", p))
}

如果我给它一个单一的模型,它工作正常:

> fun(model=mod)
[1] "mod ; p = 0.901618595026321"

但是如果我将它应用于一个列表,无论是否命名,它都不起作用:

> lapply(list(mod, mod), fun)
[[1]]
[1] "[[ ; p = 0.901618595026321" "X ; p = 0.901618595026321"
[3] "i ; p = 0.901618595026321"

[[2]]
[1] "[[ ; p = 0.901618595026321" "X ; p = 0.901618595026321"
[3] "i ; p = 0.901618595026321"

> lapply(list(modA=mod, modB=mod), fun)
$modA
[1] "[[ ; p = 0.901618595026321" "X ; p = 0.901618595026321"
[3] "i ; p = 0.901618595026321"

$modB
[1] "[[ ; p = 0.901618595026321" "X ; p = 0.901618595026321"
[3] "i ; p = 0.901618595026321"

为清楚起见,我想要的是:

[[1]]
[1] "modA ; p = 0.901618595026321"
[[2]]
[1] "modB ; p = 0.901618595026321"

最佳答案

您是否有理由不想对列表名称使用 lapply

fun2 = function(models, name){
model <- models[[name]]
p <- summary(model)$coefficients[2,4]
return(paste(name, "; p =", p))
}
mods = list(modA = mod, modB = mod)
lapply(names(mods), fun2, models = mods)
# [[1]]
# [1] "modA ; p = 0.828746440943558"

# [[2]]
# [1] "modB ; p = 0.828746440943558"

关于r - 从传递给函数内部函数的列表中获取参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33405046/

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