Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R substitute()用于替换表达式中的值,它正在添加不必要的引号_R_Expression_Substitution_R Formula - Fatal编程技术网

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

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) +

我试图更新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) + `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