我试图自动化我的一段代码,这样编程就不会那么繁琐了。
基本上,我试图使用fastbw()在rms包中逐步选择变量。我想将fastbw()选择的变量列表作为y ~ x1+x2+x3传递给一个公式,"x1“"x2”"x3“是fastbw()选择的变量列表。
下面是我尝试过但没有工作的代码
olsOAW0.r060 <- ols(roll_pct~byoy+trans_YoY+change18m,
subset= helper=="POPNOAW0_r060",
na.action = na.exclude,
data = modelready)
OAW0 <- fastbw(olsOAW0.r060, rule="p", type="residual", sls= 0.05)
vec <- as.vector(OAW0$names.kept, mode="any")
b <- paste(vec, sep ="+") ##I even tried b <- paste(OAW0$names.kept, sep="+")
bestp.OAW0.r060 <- lm(roll_pct ~ b ,
data = modelready,
subset = helper =="POPNOAW0_r060",
na.action = na.exclude)我是新的R,仍然没有落后于陡峭的学习曲线,所以道歉明显的编程错误。
发布于 2012-02-11 06:08:43
你快到了。您只需将整个公式组合在一起,如下所示:
paste("roll_pct ~ ",b,sep = "")使用as.formula将其强制到一个实际的公式中,然后将其传递给lm。从技术上讲,我认为lm可能会强迫字符串本身,但强制使用它通常更安全。(一些期望公式的函数不会为您执行强制操作,而其他函数则会。)
发布于 2012-11-08 01:21:17
在定义b时,实际上需要使用折叠而不是seb。
b <- paste(OAW0$names.kept, collapse="+")然后你可以把它写在乔兰的回答里
paste("roll_pct ~ ",b,sep = "")或者直接使用:
paste("roll_pct ~ ",paste(OAW0$names.kept, collapse="+"),sep = "")发布于 2015-11-10 13:27:32
我今天遇到了类似的问题,如果您想使它更加通用,甚至不需要有固定的类名,您可以使用
frmla <- as.formula(paste(colnames(modelready)[1], paste(colnames(modelready)[2:ncol(modelready)], sep = "",
collapse = " + "), sep = " ~ "))这假设您在第一列中有类变量或因变量,但是索引可以很容易地切换到最后一列,如下所示:
frmla <- as.formula(paste(colnames(modelready)[ncol(modelready)], paste(colnames(modelready)[1:(ncol(modelready)-1)], sep = "",
collapse = " + "), sep = " ~ "))然后使用以下方法继续使用lm:
bestp.OAW0.r060 <- lm(frmla , data = modelready, ... )https://stackoverflow.com/questions/9238038
复制相似问题