R:为什么lapply()会将我的结果加倍?

R:为什么lapply()会将我的结果加倍?,r,function,R,Function,我正在编写一个函数,用于从一系列线性回归模型中获取诊断和测试错误 我的输入是一个列表列表。每个列表都包含其自身模型的信息 model.1 <- list("medv","~.","Boston_Ready") names(model.1) <- c("response", "input","dataset") model.2 <- list("medv","~lstat","Boston_Ready") names(model.2) <- c("response", "

我正在编写一个函数,用于从一系列线性回归模型中获取诊断和测试错误

我的输入是一个列表列表。每个列表都包含其自身模型的信息

model.1 <- list("medv","~.","Boston_Ready")
names(model.1) <- c("response", "input","dataset")

model.2 <- list("medv","~lstat","Boston_Ready")
names(model.2) <- c("response", "input","dataset")

models <- list(model.1,model.2)

这是因为Lappy的一个怪癖吗?

因为在函数的末尾,您有printresult,所以它实际上是打印出您的模型,然后将其作为列表值返回。

在从函数中打印时,您只看到它两次。如果将lappy调用分配给变量,即测试
TestError <- function(model){
  library('boot')

    df <- get(model$dataset)
    formula <- paste(model$response,model$input)
    response <- model$response

    ##Diagnostics
    fit <- lm(formula,data=df)
    fit_summ <- summary(fit)
    F_Stat <- fit_summ$fstatistic[1]
    Adj_R_Sq <- fit_summ$adj.r.squared
    RSS <- with(fit_summ, df[2] * sigma^2)
    AIC <- AIC(fit)
    BIC <- BIC(fit)

    ##Cross-Validation
    #5-fold cross validation
    glm.fit <- glm(formula, data=df)
    cv.err <- cv.glm(df, glm.fit, K=5)
    Five.Fold_MSE <- cv.err$delta[1]

    #10-fold cross validation
    glm.fit <- glm(formula, data=df)
    cv.err <- cv.glm(df, glm.fit, K=10)
    Ten.Fold_MSE <- cv.err$delta[1]

    #LOOCV
    glm.fit <- glm(formula, data=df)
    cv.err <- cv.glm(df, glm.fit)
    LOOCV_MSE <- cv.err$delta[1]

    #Output
    label <- c("lm","formula =",paste(model$response,model$input), "data= ",model$dataset)
    print(paste(label))
    Results <- (c(LOOCV_MSE,Five.Fold_MSE,Ten.Fold_MSE,F_Stat,Adj_R_Sq, RSS, AIC, BIC))
    names(Results) <- c("LOOCV MSE", "5-Fold MSE", "10-Fold MSE","F-Stat","Adjusted R^2","RSS","AIC","BIC")

    print(Results)
    }
lapply(models,TestError)

> lapply(models,TestError)
[1] "lm"           "formula ="    "medv ~."      "data= "       "Boston_Ready"
   LOOCV MSE   5-Fold MSE  10-Fold MSE       F-Stat Adjusted R^2          RSS          AIC          BIC 
   0.3250332    0.3288020    0.3251508  114.3744328    0.6918372  152.5405737  853.2181335  903.9365735 
[1] "lm"           "formula ="    "medv ~lstat"  "data= "       "Boston_Ready"
   LOOCV MSE   5-Fold MSE  10-Fold MSE       F-Stat Adjusted R^2          RSS          AIC          BIC 
   0.4597660    0.4622565    0.4593045  601.6178711    0.5432418  230.2061197 1043.4596316 1056.1392416 
[[1]]
   LOOCV MSE   5-Fold MSE  10-Fold MSE       F-Stat Adjusted R^2          RSS          AIC          BIC 
   0.3250332    0.3288020    0.3251508  114.3744328    0.6918372  152.5405737  853.2181335  903.9365735 

[[2]]
   LOOCV MSE   5-Fold MSE  10-Fold MSE       F-Stat Adjusted R^2          RSS          AIC          BIC 
   0.4597660    0.4622565    0.4593045  601.6178711    0.5432418  230.2061197 1043.4596316 1056.1392416