在for循环中运行函数并将返回的数据帧添加到R中的列表

在for循环中运行函数并将返回的数据帧添加到R中的列表,r,list,function,dataframe,R,List,Function,Dataframe,我有一个函数,在特定年份接受一个参数。此函数返回一个数据帧。现在,我想为一系列年份创建一个for循环,并将这些数据帧添加到列表中或合并到一个大型数据帧中 像这样的东西会有帮助吗: l <- list() for (year in 2010:2017) {l <- functionX(subset(dataset, Year==year))} 这也不行 编辑: 我认为,因为每年数据帧的长度不一样,所以它们不会被添加。我做了一点小小的改变- for (i in 2010:2017) {

我有一个函数,在特定年份接受一个参数。此函数返回一个数据帧。现在,我想为一系列年份创建一个for循环,并将这些数据帧添加到列表中或合并到一个大型数据帧中

像这样的东西会有帮助吗:

l <- list()
for (year in 2010:2017) {l <- functionX(subset(dataset, Year==year))}
这也不行

编辑:

我认为,因为每年数据帧的长度不一样,所以它们不会被添加。我做了一点小小的改变-

for (i in 2010:2017) {
  df <- functionX(subset(dataset, Year==i))
  l[i] <- df$Name

  }
for(我在2010:2017){

df我更新了您的示例以使其可复制。总体思路如下:在
for
循环中,您将
数据.frame
放入列表中。然后将该列表附加到大列表中,
l
。这样,您的
数据.frame
就成为列表中的一个元素
l

l <- list()
functionX <- function(Year) {
  set.seed(Year)
  df <- data.frame(year=Year, x=rnorm(10))
  return(df)
}

for (year in 2010:2011) {
  l <- functionX(year) ## this will not error, but will just overwrite l on every loop
}

l
#>    year           x
#> 1  2011 -0.65480083
#> 2  2011 -0.02877456
#> 3  2011 -0.19413575
#> 4  2011 -0.90141523
#> 5  2011  1.31329723
#> 6  2011 -0.82243619
#> 7  2011 -0.25875645
#> 8  2011  0.23465318
#> 9  2011 -0.42060734
#> 10 2011 -0.63676356

l <- list()
for (year in 2010:2011) {
  new_l <- list(functionX(year)) ## this will put the resulting df as an element in a list
  l <- append(l, new_l)          ## this appends the lists together
  }

l
#> [[1]]
#>    year            x
#> 1  2010 -0.537472741
#> 2  2010 -0.005191135
#> 3  2010  1.005671811
#> 4  2010  0.214009870
#> 5  2010 -0.201253144
#> 6  2010  1.447430260
#> 7  2010 -0.539834711
#> 8  2010 -1.520636908
#> 9  2010  0.652780491
#> 10 2010  0.613471135
#> 
#> [[2]]
#>    year           x
#> 1  2011 -0.65480083
#> 2  2011 -0.02877456
#> 3  2011 -0.19413575
#> 4  2011 -0.90141523
#> 5  2011  1.31329723
#> 6  2011 -0.82243619
#> 7  2011 -0.25875645
#> 8  2011  0.23465318
#> 9  2011 -0.42060734
#> 10 2011 -0.63676356
l3 2011-0.19413575
#> 4  2011 -0.90141523
#> 5  2011  1.31329723
#> 6  2011 -0.82243619
#> 7  2011 -0.25875645
#> 8  2011  0.23465318
#> 9  2011 -0.42060734
#> 10 2011 -0.63676356
l 1 2010-0.537472741
#> 2  2010 -0.005191135
#> 3  2010  1.005671811
#> 4  2010  0.214009870
#> 5  2010 -0.201253144
#> 6  2010  1.447430260
#> 7  2010 -0.539834711
#> 8  2010 -1.520636908
#> 9  2010  0.652780491
#> 10 2010  0.613471135
#> 
#> [[2]]
#>第十年
#> 1  2011 -0.65480083
#> 2  2011 -0.02877456
#> 3  2011 -0.19413575
#> 4  2011 -0.90141523
#> 5  2011  1.31329723
#> 6  2011 -0.82243619
#> 7  2011 -0.25875645
#> 8  2011  0.23465318
#> 9  2011 -0.42060734
#> 10 2011 -0.63676356

由(v0.2.0.9000)于2018-08-02创建。

以下代码将执行您想要的操作

首先,我将创建一个测试数据集,因为您还没有发布一个测试数据集

set.seed(527)    # make the results reproducible
dataset <- data.frame(Year = sample(2000:2018, 100, TRUE), X = rnorm(100))
set.seed(527)#使结果重现

数据集好的,我只是更改了它并重新发布了错误谢谢,JD。让我进行更改并查看……是的,它正在替换列表并插入错误,因为列表的长度不同。。。。。
set.seed(527)    # make the results reproducible
dataset <- data.frame(Year = sample(2000:2018, 100, TRUE), X = rnorm(100))
functionX <- function(DF, years){
  res <- lapply(years, function(y) subset(DF, Year == y))
  names(res) <- years
  res
}

functionX(dataset, 2010:2017)