我想为我所做的每个回归创建一个对象(其中 17 个)。理想情况下,该函数应该创建 17 个不同的对象,我可以在之后使用。目前它只是在前一个对象之上写一个对象。我怎样才能避免这种情况?如果对象部分以特定的“文件名”命名,那么最好能够在之后区分它们。
dat <- read.csv(file = filename)
reg2<<- lm(dat[,17]~dat[,6]+dat[,7])
}
for (f in filenames) {
upload(f)
}
这是<<-
函数内部全局赋值的最大问题之一。让您的功能return()
成为模型,而不是分配,并在功能之外进行分配。
# function returns the result, doesn't assign it
upload <- function(filename) {
dat <- read.csv(file = filename)
lm(dat[,17]~dat[,6]+dat[,7])
}
# assignment happens outside the function (like almost every other R function)
# this way you can use whatever name you want
reg2 <- upload("hello.csv")
reg3 <- upload("world.csv")
# or use a for loop
reg <- list()
for (f in filenames) {
reg[[f]] <- upload(f)
}
# or use lapply for the same effect more concisely
reg <- lapply(filenames, upload)
names(reg) = filenames)
# You can now access individual list elements with [[
summary(reg[["hello.csv"]])
# Or extract all the model summary stats into a nice data frame
dplyr::bind_rows(lapply(reg, broom::glance))
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句