R substitute()用于替换表达式中的值,它正在添加不必要的引号
我试图更新R中线性模型的公式,它基于我存储在数组中的变量名称。我正在使用R substitute()用于替换表达式中的值,它正在添加不必要的引号,r,expression,substitution,r-formula,R,Expression,Substitution,R Formula,我试图更新R中线性模型的公式,它基于我存储在数组中的变量名称。我正在使用替换()来代替它,代码如下 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) +
替换(
)来代替它,代码如下
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`
condition ~ (1 | subject) + a
如何删除a+b+c周围的多余“`”
如果我不使用粘贴连接,那么它可以工作,但我需要那些额外的变量
var = 'a'
formula = substitute(condition ~ (1|subject) + v, list(v = as.name(var)))
print(formula)
输出
condition ~ (1 | subject) + `a + b + c`
condition ~ (1 | subject) + a
var和covar都是char类型
另一种解决方案,它允许迭代地改变公式中的v,这也可能起作用也许我误解了您的做法,但以下方法似乎有效:
form <- 'condition ~ (1|subject) + v'
var <- 'a'
covar <- c('b', 'c')
假设
v
本身是一个术语(问题中就是这种情况),并且输入显示在末尾的注释中。那么这里有两种方法
1)更新使用重新格式化
创建公式~。-v+a+b+c
并用它更新输入公式
update(fo, reformulate(c(". - v", var, covar)))
## condition ~ (1 | subject) + a + b + c
2)getTerms另一种方法是使用getTerms
将公式分解为术语,从中删除v
,追加var
和covar
并将其重新格式化为公式:
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
var,这也确实有效!谢谢。在substitute()函数的特定情况下,我使用了“v”作为占位符。总的来说,这个解决方案也适用于我手上的线性模型公式问题。如果它足够好,只需添加var
和covar
,那么就不需要占位符了,在这种情况下,如果我们可以假设输入是字符向量x,那么就可以使用:fo2