gpt4 book ai didi

r - R中的迭代替换

转载 作者:行者123 更新时间:2023-11-30 23:48:46 27 4
gpt4 key购买 nike

我正在尝试为公式创建别名。

开始的一些数据:

data = data.table(C = runif(3), B = runif(3), N = runif(3), G = runif(3))

简单的公式

formula = substitute(C ~ I(B / N) + B + G * I(B / N))
lm(formula, data)

现在让我们为 B/N 创建一个简单的别名,并将其命名为 avg_BN

aliases = list(
avg_BN = quote(B / N)
)
formula_primitive = substitute(C ~ I(avg_BN) + B + G * I(avg_BN), aliases)
lm(formula_primitive, data)

我的问题来了,当我创建复杂的别名时,它们在定义中使用了其他别名(inverse_BNsuper_duper):

aliases_complex = list(
avg_BN = quote(B / N),
inverse_BN = quote(1 / avg_BN), #I use alias in alias
super_duper = quote(avg_BN / inverse_BN) #I use alias in alias
)
formula_complex = substitute(C ~ I(avg_BN) + B + G * I(inverse_BN) + super_duper, aliases_complex)
lm(formula_complex, data)

如何进行迭代替换?我最初想将别名的定义拆分为基元和复数,评估第一个基元,然后转为复数。但事实上,在复合体中会出现同样的问题,因为它可以链接到另一个复合体,而另一个复合体又链接到另一个,依此类推。因此,我需要某种减少替代。我觉得我正在创造另一辆自行车。

最佳答案

使用bquote?

e1 <- new.env()
e1$avg_BN <- quote(B / N)
e1$inverse_BN <- bquote(1 / .(avg_BN), e1)
e1$super_duper <- bquote(.(avg_BN) / .(inverse_BN), e1)

formula_complex <- bquote(C ~ I(.(avg_BN)) + B + G * I(.(inverse_BN)) + .(super_duper), e1)
#C ~ I(B/N) + B + G * I(1/(B/N)) + B/N/(1/(B/N))

关于r - R中的迭代替换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29149500/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com