我有一个相当具体的正则表达式问题,这让我有些悲伤。我已从混合模型(或lme
或lme4
)中删除了一个或多个固定效应,并希望删除相应的随机斜率。但是,根据随机结构,这可能会留下不必要的+
符号,或者更糟糕的是,在|
.
分别使用 和 获取lme
随机效应公式列表:lme4
lme.model$call$random
findbars(formula(lme4.model))
random.structures = list(
"~ b | random1",
"(b | random1)",
"~ b + x1 | random1",
"(b + x1 | random1)",
"~ x1 + b| random1",
"(x1 + b| random1)",
"~ b + x1 + c | random1",
"(b+ x1 + c | random1)",
"~b + x1 + x2 | random1",
"(b + x1 + x2 | random1)",
"~ x1 + x2 + b | random1",
"(x1 + x2 + b | random1)"
)
我已经删除了变量b
,并c
使用dropterms
. 由于它们不再作为固定效应存在,因此不应允许它们的随机斜率变化。
b
并且c
可以使用以下行从上面的随机公式中删除:
random.structures = lapply(random.structures, function(i) gsub("b|c", "", i))
现在,我希望删除所有剩余的+
符号,即那些不链接变量的符号。
~
然后,如果or(
和之间有空格|
,我希望插入一个1
.
所需的输出是
random.structures2 = list(
"~ 1 | random1",
"(1 | random1)",
"~ x1 | random1",
"(x1 | random1)",
"~ x1 | random1",
"(x1 | random1)",
"~ x1 | random1",
"(x1 | random1)",
"~ x1 + x2 | random1",
"(x1 + x2 | random1)",
"~ x1 + x2 | random1",
"(x1 + x2 | random1)"
)
我一直在摆弄,gsub
但似乎无法做到正确。例如,这有效:
gsub("(.*)\\+\\ |(.*)\\+(\\|)", "\\1", random.structures[[3]])
# Accounting for space or lack of space between + and |
但不是为了这个:
gsub("(.*)\\+\\ |(.*)\\+(\\|)", "\\1", random.structures[[7]])
或者,如果有像dropterms
随机结构这样的预先存在的功能,我全力以赴!
同样,我不能可靠地将 a 插入到or1
之间的空白处。~ |
( |