保存包含for循环的函数的结果

时间:2019-02-09 20:11:55

标签: r function for-loop data-science policy

expeRts

我创建了一个函数,该函数计算满足某些条件的行数。我之所以要执行此功能,是因为其中一个条件必须采用向量中具有的不同标签-我没有使用过滤器,因为我不得不更改过滤器上的条件之一并一遍又一遍地返回原始数据帧。 我的功能:

counting <- function(df, na.rm = TRUE, ...) {

    for (i in seq_along(counties)) {   
      observations<-
      nrow(subset(financial_environment, 
financial_environment$county==counties[i]
                  & population> 500000))
      print(observations) }
}
counting(financial_environment)

问题是如何将控制台的输出保存在向量中(内部有for循环)。 我想使用此向量来创建一个数据帧,并在代码中包含先前的向量。

我阅读了其他stackoverflow问题,但与我编写的函数相比,这些函数看起来有些基础。这些答案推荐以下内容:

创建一个可以保存结果的向量。 results <- vector("numeric", 650L)

然后只需更改函数的一行:

counting <- function(df, na.rm = TRUE, ...) {

    for (i in seq_along(counties)) {   
      observations<- 
      nrow(subset(financial_environment, 
financial_environment$county==counties[i]
                  & population> 500000))
      print(observations)}

接下来,我将函数应用于数据框并查看“结果”矢量 counting(financial_environment) results 这样,“结果”向量内部只有零。

我也尝试过使用sapply,但是控制台显示了1000次obesvartion。我注意到结果是重复的,即应用该功能时,最后450个输出是前450个输出。

非常感谢您的评论和建议。

1 个答案:

答案 0 :(得分:0)

如果我正确理解,应该可以执行以下操作:

results <- vector("numeric", 650L)

counting <- function(someOption) {
  for (i in seq_along(someOption)) {   
    observation <- insertHereYourCodeForObservation
    results[i] <- observation
  }
  results
}

results <- counting(someOption = someData)

在这种情况下,该函数将返回results数组,然后将其显式分配给results

或者,results的值可以使用<<-从函数内部直接更改,如下所示(Ben373指出,已弃用):

results <- vector("numeric", 650L)

counting <- function(someOption) {
  for (i in seq_along(someOption)) {   
    observation <- insertHereYourCodeForObservation
    results[i] <<- observation
  }
}

counting(someOption = someData)

请注意,在后面的代码中,该函数未返回任何内容。