r - 如何修改公式的左边?

标签 r

我要修改左边的mu.fo具有存储在 response 中的值的公式多变的。这个想法是获得这样的新公式:profit ~ x1 + x2但实际上我得到了 response ~ x1 + x2 .

如何使用存储在 response 中的值自动变量?

response <- 'profit'
mu.fo <- ~ x1 + x2
update.formula(mu.fo, response ~ .)

最佳答案

有多种方法可以实现这一点。

一种方法是使用 as.name()对信息进行编码 "profit"作为字符串以外的东西,作为 R 名称(或符号)。

response <- as.name("profit")
frm <- as.formula(bquote(.(response) ~ .))
str(frm)

> str(frm)
Class 'formula'  language profit ~ .
  ..- attr(*, ".Environment")=<environment: R_GlobalEnv>

这里response是符号/名称 profit .我们使用 bquote替换 response 中的东西而不是文字 response ,并将该表达式强制转换为公式。这样,我们最终得到的对象与我们输入 profit ~ . 的对象相同。
> all.equal(frm, profit ~ .)
[1] TRUE

如果 "profit",这有效也在字符向量中:
foo <- c("profit", "loss")
response <- as.name(foo[1])
as.formula(bquote(.(response) ~ .))
response <- as.name(foo[2])
as.formula(bquote(.(response) ~ .))

> foo <- c("profit", "loss")
> response <- as.name(foo[1])
> as.formula(bquote(.(response) ~ .))
profit ~ .
> response <- as.name(foo[2])
> as.formula(bquote(.(response) ~ .))
loss ~ .

另一种方式是paste()串在一起或使用 reformulate()
response <- "profit"
f1 <- formula(paste(response, "~ ."))
f2 <- reformulate(".", response = response)
str(f1)
str(f2)
all.equal(f1, f2)
all.equal(frm, f1)

> str(f1)
Class 'formula'  language profit ~ .
  ..- attr(*, ".Environment")=<environment: R_GlobalEnv> 
> str(f2)
Class 'formula'  language profit ~ .
  ..- attr(*, ".Environment")=<environment: R_GlobalEnv> 
> all.equal(f1, f2)
[1] TRUE
> all.equal(frm, f1)
[1] TRUE

您最终选择哪个实际上取决于您真正在做什么。

关于r - 如何修改公式的左边?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37824625/

相关文章:

r - 在 R 中使用 H2O 进行并行处理

r - 提取 data.table 的片段

r - 如何在整个 data.frame 上使用条件并与向量进行比较?

r - 如何在 igraph 中绘制节点大小的网络度、x 轴的特征向量以及 y 轴的属性?

滚动 join + sum 而不会炸毁内存

r - 删除重复的组合(与顺序无关)

r - 一次转换数据帧的多列类型

r - 通过交替列组合矩阵

r - 如何获得累积和图上常规时间点插值的斜率?

Python cumsum 每次遇到新值时递增