我想编写一个函数,并使用lapply
自动运行某些具有不同协变量的模型。但是我无法更改每个模型需要使用的变量。
bootstrap_vars <- list(vars1=c(1,2,3), vars2=c(2,3,4), vars3=c(1,3,4))
full_mod <- lm(Y ~ X[,full_vars])
getFstat <- function(Vars, X, Y, full_mod) {
boot_mod <- lm(Y ~ X[,Vars], data=data)
ano <- anova(full_mod, boot_mod, test="F")
# cat("Variables:", Vars, ". F-stat: ", ano$F[2], "\n")
ano$F[2] # Return F-statistic between full model and one bootstrap model
}
all_F <- unlist(lapply(bootstrap_vars, FUN = getFstat, X=X, Y=Y, full_mod=full_mod))
它无法识别lapply
中的X,并显示anova
的boot_mod和full_mod具有不同的数据集?我该如何运作?
答案 0 :(得分:0)
lapply
我们依次选择列表中的每个元素,例如list[[1]]
,list[[2]]
等。在您的情况下,您可以稍微更改函数的结构以使它可以正常工作(尽管由于您的示例不可复制,所以我无法对其进行测试):
bootstrap_vars <- list(vars1=c(1,2,3), vars2=c(2,3,4), vars3=c(1,3,4))
full_mod <- lm(Y ~ X[,full_vars])
## Function that will intake the variable Vars for list[[Vars]]
getFstat <- function(Vars, Y, full_mod) {
boot_mod <- lm(Y ~ Vars, data=data)
ano <- anova(full_mod, boot_mod, test="F")
# cat("Variables:", Vars, ". F-stat: ", ano$F[2], "\n")
ano$F[2] # Return F-statistic between full model and one bootstrap model
}
all_F <- unlist(lapply(bootstrap_vars, FUN = getFstat, Y=Y, full_mod=full_mod))
在这种情况下,您的函数将基本运行:
getFstat(bootstrap_vars[[1]], ...)
getFstat(bootstrap_vars[[2]], ...)
getFstat(bootstrap_vars[[3]], ...)