我有一个相当具体的正则表达式问题,这让我有些悲伤。我已从混合模型(或lme或lme4)中删除了一个或多个固定效应,并希望删除相应的随机斜率。但是,根据随机结构,这可能会留下不必要的+符号,或者更糟糕的是,在|.
分别使用 和 获取lme随机效应公式列表:lme4lme.model$call$randomfindbars(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之间的空白处。~ |( |