For循环内部的函数参数

时间:2019-12-10 16:08:49

标签: r function loops for-loop

我在下面有一个简单的函数,但是为什么函数运行后我的列表(例如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()

2 个答案:

答案 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))

发挥作用。