为了账号安全,请及时绑定邮箱和手机立即绑定

如何在公式中按字符串使用参考变量?

如何在公式中按字符串使用参考变量?

守着一只汪 2019-11-14 15:19:03
在下面的最小示例中,我尝试vars在回归公式中使用字符串的值。但是,我只能将变量名的字符串(“ v2 + v3 + v4”)传递给公式,而不是该字符串的真实含义(例如,“ v2”是dat $ v2)。我知道有更好的方法进行回归分析(例如lm(v1 ~ v2 + v3 + v4, data=dat))。我的情况更加复杂,我正在尝试弄清楚如何在公式中使用字符串。有什么想法吗?更新以下代码# minimal example # create data framev1 <- rnorm(10)v2 <- sample(c(0,1), 10, replace=TRUE)v3 <- rnorm(10)v4 <- rnorm(10)dat <- cbind(v1, v2, v3, v4)dat <- as.data.frame(dat)# create objects of column namesc.2 <- colnames(dat)[2]c.3 <- colnames(dat)[3]c.4 <- colnames(dat)[4]# shortcut to get to the type of object my full code producesvars <- paste(c.2, c.3, c.4, sep="+")### TRYING TO SOLVE FROM THIS POINT:print(vars)# [1] "v2+v3+v4"# use vars in regressionregression <- paste0("v1", " ~ ", vars)m1 <- lm(as.formula(regression), data=dat)更新:@Arun v1对于第一个示例中缺少的“”是正确的。这解决了我的示例,但是我的真实代码仍然有问题。在下面的代码块中,我调整了示例以更好地反映我的实际代码。我一开始选择创建一个简单的示例,以为问题是字符串vars。这是一个不起作用的示例:)使用dat上面创建的相同数据框。dv <- colnames(dat)[1]r2 <- colnames(dat)[2]# the following loop creates objects r3, r4, r5, and r6# r5 and r6 are interaction termsfor (v in 3:4) {  r <- colnames(dat)[v]  assign(paste("r",v,sep=""),r)  r <- paste(colnames(dat)[2], colnames(dat)[v], sep="*")  assign(paste("r",v+2,sep=""),r)}# combine r3, r4, r5, and r6 then collapse and remove trailing +vars2 <- sapply(3:6, function(i) {                 paste0("r", i, "+")                })vars2 <- paste(vars2, collapse = '')vars2 <- substr(vars2, 1, nchar(vars2)-1)# concatenate dv, r2 (as a factor), and vars into `eq`eq <- paste0(dv, " ~ factor(",r2,") +", vars2)这是问题:print(eq)# [1] "v1 ~ factor(v2) +r3+r4+r5+r6"与regression第一个示例不同,eq它不引入列名(例如v3)。对象名称(例如r3)被保留。因此,以下lm()命令不起作用。m2 <- lm(as.formula(eq), data=dat)
查看完整描述

2 回答

?
郎朗坤

TA贡献1921条经验 获得超9个赞

使用paste。


create_ctree <- function(col){

    myFormula <- paste(col, "~.", collapse="")

    ctree(myFormula, data)

}

create_ctree("class")


查看完整回答
反对 回复 2019-11-14
  • 2 回答
  • 0 关注
  • 677 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信