gpt4 book ai didi

r - 如何将参数作为字符传递给函数内的函数?

转载 作者:行者123 更新时间:2023-12-04 05:00:17 25 4
gpt4 key购买 nike

我正在尝试根据数据中不同类别的子集创建一系列模型。我没有创建一堆单独的模型对象,而是使用 lapply()根据我的类别因子的每个级别的子集创建模型列表,如下所示:

test.data <- data.frame(y=rnorm(100), x1=rnorm(100), x2=rnorm(100), category=rep(c("A", "B"), 2))

run.individual.models <- function(x) {
lm(y ~ x1 + x2, data=test.data, subset=(category==x))
}

individual.models <- lapply(levels(test.data$category), FUN=run.individual.models)
individual.models

# [[1]]

# Call:
# lm(formula = y ~ x1 + x2, data = test.data, subset = (category ==
# x))

# Coefficients:
# (Intercept) x1 x2
# 0.10852 -0.09329 0.11365
# ....

这非常有效,除了模型调用显示 subset = (category == x)而不是 category == "A"等。这使得同时用于诊断目的(很难记住列表中的哪个模型对应于哪个类别)和像 predict() 这样的函数变得更加困难。 .

有没有办法替换 x的实际字符值?进 lm()调用以便模型不使用原始 x在通话中?

最佳答案

沿着 Explicit formula used in linear regression

使用 bquote构造调用

run.individual.models <- function(x) {
lmc <- bquote(lm(y ~ x1 + x2, data=test.data, subset=(category==.(x))))
eval(lmc)
}

individual.models <- lapply(levels(test.data$category), FUN=run.individual.models)
individual.models

[[1]]

Call:
lm(formula = y ~ x1 + x2, data = test.data, subset = (category ==
"A"))

Coefficients:
(Intercept) x1 x2
-0.08434 0.05881 0.07695


[[2]]

Call:
lm(formula = y ~ x1 + x2, data = test.data, subset = (category ==
"B"))

Coefficients:
(Intercept) x1 x2
0.1251 -0.1854 -0.1609

关于r - 如何将参数作为字符传递给函数内的函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16229330/

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