R substitute(),用于替换表达式中的值,添加了不必要的引号

R substitute(), to substitute values in expression, is adding unnecessary quotes

我正在尝试根据存储在数组中的变量名称更新 R 中线性模型的公式。我为此使用 substitute(),代码如下。

var = 'a'
covar = c('b', 'c')
covar = paste(c(var, covar), collapse = ' + ')
formula = substitute(condition ~ (1|subject) + v, list(v = as.name(covar)))
print(formula)

输出

condition ~ (1 | subject) + `a + b + c`

如何去掉 a + b + c 周围多余的``?

如果我不与 paste 连接,那么它可以工作,但我需要那些额外的变量...

var = 'a'
formula = substitute(condition ~ (1|subject) + v, list(v = as.name(var)))
print(formula)

输出

condition ~ (1 | subject) + a

var和covar都是char类型

另一种可以在公式中迭代更改 v 的解决方案

也许我误解了你在做什么,但以下似乎有效:

form  <- 'condition ~ (1|subject) + v'
var   <- 'a'
covar <- c('b', 'c')

然后结合paste直接转公式:

covar <- paste(var, paste(covar, collapse=" + "), sep=" + ")
form  <- formula(paste(form, covar, sep=" + "))

输出:

condition ~ (1 | subject) + v + a + b + c

假设 v 本身就是一个术语(问题中就是这种情况),并且最后的注释中显示了输入。那么这里有两种方法。

1) update 使用 reformulate 创建公式 ~ . - v + a + b + c 并用它更新输入公式。

update(fo, reformulate(c(". - v", var, covar)))
## condition ~ (1 | subject) + a + b + c

2) getTerms 另一种方法是使用 中的 getTerms 将公式分解为项,删除 v,附加 varcovarreformulate 它回到一个公式:

reformulate(c(setdiff(sapply(getTerms(fo[[3]]), format), "v"), var, covar), fo[[2]])
## condition ~ (1 | subject) + a + b + c

备注

假定输入为:

var <- 'a'
covar <- c('b', 'c')
fo <- condition ~ (1 | subject) + v