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
,附加 var
和 covar
和 reformulate
它回到一个公式:
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
我正在尝试根据存储在数组中的变量名称更新 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
,附加 var
和 covar
和 reformulate
它回到一个公式:
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