如何R中引用这(How to quote this in R)

2019-10-23 07:15发布

我写了一个功能:

gener1 <- function(du){
  nth <- paste0(paste0("dum", 1:du, " * ", "X", 1:du), collapse = " + ")
  return(nth)
  }

它返回一个序列:

"dum1 * X1 + dum2 * X2 + dum3 * X3" 

现在,我想在接下来的功能,使用该序列。 只要我可以只复制并粘贴:

S = quote(dum1 * X1 + dum2 * X2 + dum3 * X3)

结果:

dum1 * X1 + dum2 * X2 + dum3 * X3

有用。 我不知道是否有可能使自动化,我并不需要使用“复制粘贴的方法”。

最终的产品我要实现的是在下列情况下使用S:

fo <- substitute(BH100 ~ S * ((1 - exp(-b2*TIME))/(1-exp(-b2*100)))^b3, list(S = S))

nls(fo, data = dane, start = list(b2 = 0.01, b3 = 1.1, X1 = 20, X2 = 20, X3 = 20))

下面是数据结构我的一个例子

year    T   BH100   TIME    dum1    dum2    dum3    dum4
1987    25  12.6    25  1   0   0   0
1990    28  14.9    28  1   0   0   0
1994    32  18.8    32  1   0   0   0
1983    21  13.4    21  0   1   0   0
1986    24  16.1    24  0   1   0   0
1990    28  19.6    28  0   1   0   0
1998    36  26.7    36  0   1   0   0
2002    40  27.8    40  0   1   0   0
1994    32  17.2    32  0   0   1   0
1998    36  19.4    36  0   0   1   0
2002    40  23.5    40  0   0   1   0
2008    46  26.3    46  0   0   1   0
2013    51  28.7    51  0   0   1   0
1985    23  14.6    23  0   0   0   1
1989    27  18.5    27  0   0   0   1
1990    28  19.2    28  0   0   0   1

Answer 1:

我不知道我完全理解你的问题,但我认为你正在寻找的eval功能。 你gener1功能,现在正在生成的字符串: "dum1 * X1 + dum2 * X2 + dum3 * X3" 您可以使用评估这个字符串evalparse

expression = gener1(3)
> expression
[1] "dum1 * X1 + dum2 * X2 + dum3 * X3"
evaluated_expression = eval(parse(text=expression))
> evaluated_expression
[1] 68

所以,你的榜样,您可以使用生成的表达式字符串gener1功能,然后用评估的输出在fo变量:

S = eval(parse(text = gener1(3)))
fo <- substitute(BH100 ~ S * ((1 - exp(-b2*TIME))/(1-exp(-b2*100)))^b3, list(S = S))
nls(fo, data = dane, start = list(b2 = 0.01, b3 = 1.1, X1 = 20, X2 = 20, X3 = 20))


文章来源: How to quote this in R
标签: r quote