在for循环中运行函数并将返回的数据帧添加到R中的列表
我有一个函数,在特定年份接受一个参数。此函数返回一个数据帧。现在,我想为一系列年份创建一个for循环,并将这些数据帧添加到列表中或合并到一个大型数据帧中 像这样的东西会有帮助吗:在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) {
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)