如何使R中具有可变输入的函数自动化



我正在尝试制作一个函数,该函数将生成单行代码,但对于每个使用实例,该行可能因输入数据而异。

我试图复制的线路是这个

model1 <- lm(DF[,2]~DF[,3]+DF[,4]+DF[,5]+DF[,6]+DF[,7])

我尝试使用一个简单的For loopDF自动执行此操作这里`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

最新更新