Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 线性模型中cbind与paste的结合_R_String_Formula_Lm_Cbind - Fatal编程技术网

R 线性模型中cbind与paste的结合

R 线性模型中cbind与paste的结合,r,string,formula,lm,cbind,R,String,Formula,Lm,Cbind,我想知道我怎样才能想出一个lm公式语法,使我能够将paste与cbind一起用于多元回归 例子 在我的模型中,我有一组变量,对应于下面的原始示例: data(mtcars) depVars <- paste("mpg", "disp") indepVars <- paste("qsec", "wt", "drat") 我感兴趣的是在不引用变量名的情况下生成相同的公式,并且只使用上面定义的depVars和indepVars向量 尝试1 例如,我想到的是: mod1 <- l

我想知道我怎样才能想出一个
lm
公式语法,使我能够将
paste
cbind
一起用于多元回归

例子 在我的模型中,我有一组变量,对应于下面的原始示例:

data(mtcars)
depVars <- paste("mpg", "disp")
indepVars <- paste("qsec", "wt", "drat")

我感兴趣的是在不引用变量名的情况下生成相同的公式,并且只使用上面定义的
depVars
indepVars
向量


尝试1 例如,我想到的是:

mod1 <- lm(formula = formula(paste(cbind(paste(depVars, collapse = ",")), " ~ ",
                                   indepVars)), data = mtcars)
mod1我认为它有效

data(mtcars)
depVars <- c("mpg", "disp")
indepVars <- c("qsec", "wt", "drat")

lm(formula(paste('cbind(',
                 paste(depVars, collapse = ','),
                 ') ~ ',
                 paste(indepVars, collapse = '+'))), data = mtcars)
数据(mtcars)

depVars以下所有解决方案都使用这些定义:

depVars <- c("mpg", "disp")
indepVars <- c("qsec", "wt", "drat")
给予:

Call:
lm(formula = "cbind(mpg, disp) ~ qsec+wt+drat", data = mtcars)

Coefficients:
             mpg       disp    
(Intercept)   11.3945  452.3407
qsec           0.9462  -20.3504
wt            -4.3978   89.9782
drat           1.6561  -41.1148
Call:
lm(formula = cbind(mpg, disp) ~ qsec + wt + drat, data = mtcars[c(depVars, 
    indepVars)])

Coefficients:
             mpg       disp    
(Intercept)   11.3945  452.3407
qsec           0.9462  -20.3504
wt            -4.3978   89.9782
drat           1.6561  -41.1148
Call:
lm(formula = cbind(mpg, disp) ~ qsec + wt + drat, data = mtcars)

Coefficients:
             mpg       disp    
(Intercept)   11.3945  452.3407
qsec           0.9462  -20.3504
wt            -4.3978   89.9782
drat           1.6561  -41.1148
1a)这也适用于:

fo <- sprintf("cbind(%s) ~.", toString(depVars))
do.call("lm", list(fo, quote(mtcars[c(depVars, indepVars)])))

2)重新格式化@akrun和@Konrad,在下面的评论中,问题建议使用
重新格式化
。这种方法产生一个
“formula”
对象,而上面的方法产生一个字符串作为公式。(如果上面的解决方案需要这一点,那么可以使用
for the
depVars
是一个带空格的
字符串。您可以使用
粘贴(c(“qsec”,“wt”,“drat”),collapse=“+”)
@akrun感谢您的贡献,我猜这应该是那些行中的内容,但是:语法
公式(cbind)(粘贴(depVars)),“~”,粘贴(indepVars,collapse='+'),data=mtcars)
不起作用。我遇到的问题是如何组合
cbind
/
paste
。也许使用会有帮助?看起来
重新格式化
可能会有帮助。我认为问题在于
粘贴(depVars))
@akrun-Yup,我还看到,如果通过
c()
而不是
paste()
来定义具有变量名的向量会更好!非常感谢。我们进展缓慢,我有一种预感,
cbind(
)会有一些东西。顺便说一句,这是一种有趣的编写代码的方式,就像在Excel中臭名昭著的
串联
。非常感谢您的贡献!
fo <- sprintf("cbind(%s) ~.", toString(depVars))
do.call("lm", list(fo, quote(mtcars[c(depVars, indepVars)])))
Call:
lm(formula = cbind(mpg, disp) ~ qsec + wt + drat, data = mtcars[c(depVars, 
    indepVars)])

Coefficients:
             mpg       disp    
(Intercept)   11.3945  452.3407
qsec           0.9462  -20.3504
wt            -4.3978   89.9782
drat           1.6561  -41.1148
fo <- reformulate(indepVars, parse(text = sprintf("cbind(%s)", toString(depVars)))[[1]])
do.call("lm", list(fo, quote(mtcars)))
Call:
lm(formula = cbind(mpg, disp) ~ qsec + wt + drat, data = mtcars)

Coefficients:
             mpg       disp    
(Intercept)   11.3945  452.3407
qsec           0.9462  -20.3504
wt            -4.3978   89.9782
drat           1.6561  -41.1148
m <- as.matrix(mtcars)
fit <- lm.fit(cbind(1, m[, indepVars]), m[, depVars])
> names(fit)
[1] "coefficients"  "residuals"     "effects"       "rank"         
[5] "fitted.values" "assign"        "qr"            "df.residual"