对列表应用for循环

kcugc4gi  于 2023-02-06  发布在  其他
关注(0)|答案(1)|浏览(121)

我试图从t-1的值和增长率计算出几个国家在t期间的gdp值,为此我创建了这个for循环,它适用于单个国家:

growth_function = function(x, value, growth){
  for (i in 2:length(x)) {
    value[i] <- (value[[i-1]])*(1+growth[[i]])
  }
}

为了将它应用到所有国家,我在 Dataframe 上使用split(),并创建了一个包含所有国家的列表。

projections_list <- lapply(projections_list, growth_function('iso', 'mnninc', 'gdp_growth'))

但我有以下消息错误:

Error in growth[[i]] : subscript out of bounds

你可以在下面的image中找到我的列表中的一个元素。所有元素的构造都是一样的。如果有人能给予一个提示来找到解决方案,我将非常感激。

ni65a41a

ni65a41a1#

当尝试使用字符串valuegrowth访问x的列时,需要在函数中使用x[[value]]x[[growth]]
也许可以像这样重写函数:

growth_function = function(x, value, growth){
  for (i in 2:length(x)) {
    x[[value]][i] <- (x[[value]][[i-1]])*(1+x[[growth]][[i]])
  }
  return(x[[value]])
}

并在projections_list的每个元素上调用此函数,如下所示:

lapply(projections_list, \(i) growth_function(i, value="mnnic", growth = "gdp_growth"))

请注意,因为您在函数中从2:length(x)开始循环,并赋值给x[[value]][i],所以x[[value]]的最后一个元素将是NA。最后,我假设您理解这不会更改projections_list中每个 Dataframe 中mnnic列的实际值。

相关问题