如何在lapply中引用data.frame列?

时间:2019-02-25 04:11:53

标签: r dataframe lapply

我想编写一个函数,并使用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具有不同的数据集?我该如何运作?

1 个答案:

答案 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]], ...)