你的代码产生一个长度为3的列表,这个迭代的数量和这三个列表项中的每一个都是长度为3的列表,即mydflist
中的数据帧的数量。 但是从配方
我想要做的是 来访问每个数据帧的结果将迭代的第i个数字,是这样的: 结果$ mydflist $ myfirstdfi在那里我会的数量迭代所以 结果$ mydflist $ myfirstdf1。
在你的问题
我猜你真正想要的是长度为9的平列表,包含每一件每个迭代步骤和mydflist
每个数据帧,命名
“myfirstdf1”“myseconddf1” “mythirddf1”
“myfirstdf2” “myseconddf2” “mythirddf2”
“myfirstdf3” “myseconddf3” “mythirddf3”。
下面的函数可以处理这两种情况下:
iteration <- function(dfList, fnct, numberOfIterations, flat=TRUE)
{
L <- list()
for (i in 1:numberOfIterations){
L[[i]] <- lapply(dfList, fnct, i)
names(L[[i]]) <- paste0(names(dfList), i)
}
return(if (flat) unlist(L,recursive=FALSE) else L)
}
实施例:
mydflist <- list(
myfirstdf = data.frame(matrix(1:20,4,5)),
myseconddf = data.frame(matrix(1:12,2,6)),
mythirddf = data.frame(matrix(1:15,3,5))
)
f <- function(df,i)
{
longdata <- ncol(df)-i
sum(df[,1:longdata])
}
results <- iteration(mydflist,f,4,FALSE)
results_flat <- iteration(mydflist,f,4)
(我已经改变迭代次数从3到4,以避免与dataframes的数目混乱) 这里是结果列表results
,这是不是 flat:
> results
[[1]]
[[1]]$myfirstdf1
[1] 136
[[1]]$myseconddf1
[1] 55
[[1]]$mythirddf1
[1] 78
[[2]]
[[2]]$myfirstdf2
[1] 78
[[2]]$myseconddf2
[1] 36
[[2]]$mythirddf2
[1] 45
[[3]]
[[3]]$myfirstdf3
[1] 36
[[3]]$myseconddf3
[1] 21
[[3]]$mythirddf3
[1] 21
[[4]]
[[4]]$myfirstdf4
[1] 10
[[4]]$myseconddf4
[1] 10
[[4]]$mythirddf4
[1] 6
请注意,迭代步骤的数量会出现两次。例如,对于在第一次迭代步骤第三数据帧的结果是
> results[[1]]$mythirddf1
[1] 78
在平坦列表的名称results_flat
迭代步骤的数目只出现一次:
> results_flat
$myfirstdf1
[1] 136
$myseconddf1
[1] 55
$mythirddf1
[1] 78
$myfirstdf2
[1] 78
$myseconddf2
[1] 36
$mythirddf2
[1] 45
$myfirstdf3
[1] 36
$myseconddf3
[1] 21
$mythirddf3
[1] 21
$myfirstdf4
[1] 10
$myseconddf4
[1] 10
$mythirddf4
[1] 6
例如在第一迭代步骤第三数据帧的结果是
> results_flat$mythirddf1
[1] 78
如果你想通过results$mydflist$mythirddf1
访问这个结果,然后建立一个组件列表results
如下:
> results <- list(mydflist=iteration(mydflist,f,4))
唯一的一个组成部分这个名单results
的是列表results_flat
以上, 它的名字是mydflist
:
> results
$mydflist
$mydflist$myfirstdf1
[1] 136
$mydflist$myseconddf1
[1] 55
$mydflist$mythirddf1
[1] 78
$mydflist$myfirstdf2
[1] 78
$mydflist$myseconddf2
[1] 36
$mydflist$mythirddf2
[1] 45
$mydflist$myfirstdf3
[1] 36
$mydflist$myseconddf3
[1] 21
$mydflist$mythirddf3
[1] 21
$mydflist$myfirstdf4
[1] 10
$mydflist$myseconddf4
[1] 10
$mydflist$mythirddf4
[1] 6
除非我误解了某些东西,否则倒换'for'循环和'lapply'的顺序可能会更方便;即(1)构建一个接收“data.frame”的函数,迭代3次,每次添加一列,并返回结果,(2)'lapply'你的函数通过“mydflist”。也许,一个'mydflist'和想要的输出例子会更好。 –
我刚刚编辑了我的问题,希望更清楚 – mina