我在下面有一个简单的函数,但是为什么函数运行后我的列表(例如for循环中的v [[]])为空?
demo <- "Secure + Male + U.Edu."
fms <- list()
bims <- list()
ims <- list()
geezy <- function(x, v, z, w) {
for (y in fnames){
ffsa <- na.omit(subset(ffs, select = append(paste(y), varsv)))
form <- formula(paste(y, "~", x))
v[[y]] <- gee(form, data = ffsa, id = FamilyID)
}
for (y in cinames){
ffsa <- na.omit(subset(ffs, select = append(paste(y), varsv)))
form <- formula(paste(y, "~", x))
z[[y]] <- gee(form, data = ffsa, id = FamilyID)
}
for (y in binames){
ffsa <- na.omit(subset(ffs, select = append(paste(y), varsv)))
form <- formula(paste(y, "~", x))
w[[y]] <- gee(form, family = binomial, data = ffsa, id = FamilyID)
}
return(list(v,z,w))
}
geezy(demo, fms, ims, bims)
fms
list()
答案 0 :(得分:1)
返回并不会导致我期望的行为。
尽管尚不完全清楚,但底部的代码表明我运行了fms
并期望使用非空列表。
我的问题是不了解函数中的分配是局部的;也就是说,我不能在函数内部分配fms,不能期望它在函数外部分配。我不得不使用创建的函数进行分配,如下所示。
geezy <- function(x) {
v <- list()
z <- list()
w <- list()
for (y in fnames){
form <- formula(paste(y, "~", x))
v[[y]] <- gee(form, data = ffs, id = FamilyID)
}
for (y in cinames){
form <- formula(paste(y, "~", x))
z[[y]] <- gee(form, data = ffs, id = FamilyID)
}
for (y in binames){
form <- formula(paste(y, "~", x))
w[[y]] <- gee(form, family = binomial, data = ffs, id = FamilyID)
}
return(list(v,z,w))
}
fms <- geezy(demo)[[1]]
我在读了https://www.r-bloggers.com/dont-run-afoul-of-scoping-rules-in-r/
之后才意识到这一点答案 1 :(得分:0)
您不退还它们。添加
return(list(v, z, w))
发挥作用。