我正在尝试制作一个函数,该函数将生成单行代码,但对于每个使用实例,该行可能因输入数据而异。
我试图复制的线路是这个
model1 <- lm(DF[,2]~DF[,3]+DF[,4]+DF[,5]+DF[,6]+DF[,7])
我尝试使用一个简单的For loop
从DF
自动执行此操作这里`DF[,2]~DF[,3]将是唯一的常量变量。以下列可以存在,也可以不存在。
minimumCode <- "DF[,2]~DF[,3]"
additionCode <- "+DF[,"
closeCode <- "]"
for (i in seq_along(4:length(colnames(DF)))) {
print(i+3)
code <- paste0(minimumCode, additionCode, i, closeCode)
}
code
"DF[,2]~DF[,3]+DF[,4]"
DF示例如下。然而,其他输入可以具有更多或更少的列。
DF <- structure(c(0, 1, 2, 3, 7, 14, 1220.574, 860.019, 839.642, 564.16,
413.3933333333, 576.577, 27.3333333333, 100, 243, 193.6666666667,
139.6666666667, 57.6666666667, 99.3333333333, 72.6666666667,
94.6666666667, 77.6666666667, 139, 120.3333333333, 245.3333333333,
238, 545.6666666667, 463, 517.3333333333, 298.3333333333, 4,
7.3333333333, 22.6666666667, 25.3333333333, 19.6666666667, 17,
0, 1, 3, 2.6666666667, 5.6666666667, 0.3333333333), .Dim = 6:7, .Dimnames = list(
c("D0", "D1", "D2", "D3", "D4", "D5"), c("Time", "Y", "X1",
"X2", "X3", "X4", "X5")))
可能需要以下函数。
linearRegr <- function(data, resp = 2, regr.fixed = 3, regr.other){
vars <- names(data)
fmla <- paste(vars[resp], vars[regr.fixed], sep = "~")
if(!missing(regr.other)){
other <- paste(vars[regr.other], collapse = "+")
fmla <- paste(fmla, other, sep = "+")
}
fmla <- as.formula(fmla)
list(formula = fmla, regression = lm(fmla, data = data))
}
linearRegr(DF, regr.other = 4:7)
#$formula
#Y ~ X1 + X2 + X3 + X4 + X5
#<environment: 0x5568142139e8>
#
#$regression
#
#Call:
#lm(formula = fmla, data = data)
#
#Coefficients:
#(Intercept) X1 X2 X3 X4 X5
# 880.262 -2.304 -6.124 4.948 -50.552 -151.624
#
model1 <- linearRegr(DF, regr.other = 4:5)
summary(model1$regression)
#
#Call:
#lm(formula = fmla, data = data)
#
#Residuals:
# D0 D1 D2 D3 D4 D5
# 253.52 -67.95 278.73 -252.54 -82.27 -129.49
#
#Coefficients:
# Estimate Std. Error t value Pr(>|t|)
#(Intercept) 1731.946 914.966 1.893 0.199
#X1 -4.110 9.941 -0.413 0.719
#X2 -10.129 16.968 -0.597 0.611
#X3 1.441 5.910 0.244 0.830
#
#Residual standard error: 342 on 2 degrees of freedom
#Multiple R-squared: 0.4423, Adjusted R-squared: -0.3943
#F-statistic: 0.5287 on 3 and 2 DF, p-value: 0.7058