如何使用正确的语法创建许多公式

问题描述 投票:0回答:1

我需要用 lapply 来拟合许多模型(一些模型具有交互作用,其他模型具有总和,其他模型仅具有一个独立变量),因此我为此目的应用以下代码

 lapply(c('+', '*'), \(symb) lapply(c('A', 'B', ' '), \(regr) {
      xnam <- 'indipendent'
      fmla <- reformulate(paste(paste0(c(xnam, regr), collapse = symb), '+', '(1|C)'), 
                          response = 'dipendent outcome')}))

不幸的是我得到了多余和错误的语法

[[1]]
[[1]][[1]]
`dipendent outcome` ~ indipendent + A + (1 | C)
<environment: 0x000002a5adcef840>

[[1]][[2]]
`dipendent outcome` ~ indipendent + B + (1 | C)
<environment: 0x000002a5ad9f9838>

[[1]][[3]]
`dipendent outcome` ~ indipendent + +(1 | C)
<environment: 0x000002a5a4dbf488>


[[2]]
[[2]][[1]]
`dipendent outcome` ~ indipendent * A + (1 | C)
<environment: 0x000002a5af17d7c0>

[[2]][[2]]
`dipendent outcome` ~ indipendent * B + (1 | C)
<environment: 0x000002a5897f99c8>

[[2]][[3]]
`dipendent outcome` ~ indipendent * +(1 | C)
<environment: 0x000002a5940a2818>

当“相同模型语法”已经可用时,我只想摆脱它。确实,以下语法

[[1]][[3]]
`dipendent outcome` ~ indipendent + +(1 | C)
<environment: 0x000002a5a4dbf488>

相当于

[[2]][[3]]
`dipendent outcome` ~ indipendent * +(1 | C)
<environment: 0x000002a5940a2818>

此外,因为我想将它们用作弹性对象的标题,所以我想获取双符号出现的位置,而只是单个符号:

[[1]][[3]]
`dipendent outcome` ~ indipendent + (1 | C)
<environment: 0x000002a5a4dbf488>

我尝试使用

str_replace
中的
stringr package
执行此操作,但它似乎不适用于公式对象。因此我想要实现的最终输出是:

[[1]]
[[1]][[1]]
`dipendent outcome` ~ indipendent + A + (1 | C)
<environment: 0x000002a5adcef840>

[[1]][[2]]
`dipendent outcome` ~ indipendent + B + (1 | C)
<environment: 0x000002a5ad9f9838>

[[1]][[3]]
`dipendent outcome` ~ indipendent + (1 | C)
<environment: 0x000002a5a4dbf488>


[[2]]
[[2]][[1]]
`dipendent outcome` ~ indipendent * A + (1 | C)
<environment: 0x000002a5af17d7c0>

[[2]][[2]]
`dipendent outcome` ~ indipendent * B + (1 | C)
<environment: 0x000002a5897f99c8>

有什么可能的方法来得到这个吗? 谢谢

r formula lapply
1个回答
0
投票

测试回归量字符数严格大于零,并相应地创建回归量向量。

这意味着最后一个回归量是空字符串

''
,而不是空格
' '

它还会为您节省一个

lapply
循环和
paste
指令。

lapply(c('A', 'B', ''), \(regr) {
  xnam <- if(nchar(regr) > 0L) {
    paste('independent', regr, sep = "*")
  } else 'independent'
  reformulate(
    termlabels = c(xnam, '(1|C)'), 
    response = as.name('dependent outcome')
  )
})
#> [[1]]
#> `dependent outcome` ~ independent * A + (1 | C)
#> <environment: 0x000001b523109978>
#> 
#> [[2]]
#> `dependent outcome` ~ independent * B + (1 | C)
#> <environment: 0x000001b523112278>
#> 
#> [[3]]
#> `dependent outcome` ~ independent + (1 | C)
#> <environment: 0x000001b52308a2c8>

创建于 2023-11-04,使用 reprex v2.0.2

© www.soinside.com 2019 - 2024. All rights reserved.