r - 如何在预测变量周围粘贴字符串以在 R 中创建模型组合列表?
问题描述
我有一个包含十二个预测变量的向量,我想要所有可能的组合:
#variable vector
d_pred <- c("A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K" , "L")
#all possible combinations
library(combinat)
pred_mat <- combn(d_pred, 4)
然后,我试图将 pred_mat (预测矩阵)中的每一列组合成一个 gam 模型,所以我想要的第一列(V1)的输出将是:
log(Y) ~ s(A,k=4) + s(B, k=4) + s(C, k=4) + s(D, k=4)
其中 Y 是响应变量。最终,我希望将每一列都放入一个模型列表中,这样我就可以将列表输入一个函数来计算每个组合的模型:
library(mgcv)
data= my_data
allModelsResults <- lapply(allModelsList,
function(x) gam(x, data=data))
要创建我尝试过的“allModelList”:
allModelsList <- apply(pred_mat, 1, function(x) as.formula(
paste(c("log(Y) ~ s(", pred_mat[x]), "(k= 4)"
collapse=" + ")) )
但它不起作用。我环顾四周,但没有运气。有谁知道如何在组合列(即 pred_mat 中的每一列)的每个预测变量周围添加“s(”和“),k=4”?
太感谢了!
解决方案
你可以试试
allModelsList <- apply(pred_mat, 1, function(x) as.formula(
paste0("log(Y) ~ ", paste("s(", x, ", k=4)", collapse ="+")) ))
这应该返回
head(allModelsList)
#> [[1]]
#> log(Y) ~ s(A, k = 4) + s(B, k = 4) + s(C, k = 4) + s(D, k = 4)
#> <environment: 0x00000230b4c16968>
#>
#> [[2]]
#> log(Y) ~ s(A, k = 4) + s(B, k = 4) + s(C, k = 4) + s(E, k = 4)
#> <environment: 0x00000230b4c1bcc0>
#>
#> [[3]]
#> log(Y) ~ s(A, k = 4) + s(B, k = 4) + s(C, k = 4) + s(F, k = 4)
#> <environment: 0x00000230b4d30760>
#>
#> [[4]]
#> log(Y) ~ s(A, k = 4) + s(B, k = 4) + s(C, k = 4) + s(G, k = 4)
#> <environment: 0x00000230b4d31c38>
#>
#> [[5]]
#> log(Y) ~ s(A, k = 4) + s(B, k = 4) + s(C, k = 4) + s(H, k = 4)
#> <environment: 0x00000230b4d33110>
#>
#> [[6]]
#> log(Y) ~ s(A, k = 4) + s(B, k = 4) + s(C, k = 4) + s(I, k = 4)
#> <environment: 0x00000230b4d3a428>
推荐阅读
- sql - 如何通过删除列中的前面字符来更新 SQL 中的列?
- python - 如何优化/加快迭代 Dataframe 并从另一个 Dataframe 匹配/获取数据?
- python - 即使字符串相等,IF 条件也没有执行
- crm - 从 Zoho CRM 检索电子邮件模板
- regex - 如何匹配所有 URL 直到斜线?
- html - html cache-control=no-cache 更改为 cache-control=max-age=0
- docker - 为什么 docker-machine 抛出致命错误:bsdthread_register 错误?
- r - DescTools :: AUC() 梯形在没有 NA 的数据集中为 na.rm = T 和 F 返回完全不同的结果
- javascript - 在客户端服务器通信中是否有 XMLHttpRequest 的替代方案
- mysql - 关于 MySQL 的最左前缀匹配优化