有没有办法让foreach()返回一个指定的列表/ data.frame。例如。foreach:保留名称
foo <- list(a = 1, b = 2)
bar <- foreach (x = foo) %do% { x * 2 }
返回list(2, 4)
。我希望它返回list(a = 2, b = 4)
。
另外,有没有办法从循环体内访问名称?
(我不感兴趣,其中名称foreach循环后分配的解决方案。)
问候
有没有办法让foreach()返回一个指定的列表/ data.frame。例如。foreach:保留名称
foo <- list(a = 1, b = 2)
bar <- foreach (x = foo) %do% { x * 2 }
返回list(2, 4)
。我希望它返回list(a = 2, b = 4)
。
另外,有没有办法从循环体内访问名称?
(我不感兴趣,其中名称foreach循环后分配的解决方案。)
问候
我用您的解决方案,直到我需要使用嵌套的foreach(与%:%
运营商)。我想出了这个:
foo <- list(a = 1, b = 2)
bar <- foreach (x = foo, .final = function(x) setNames(x, names(foo))) %do% {
x * 2
}
诀窍是使用.final
参数(这就是最终的结果应用于一次函数)来设置的名称。这更好,因为它不使用临时变量,并且整体更清洁。它可以与嵌套列表一起使用,以便可以在结构的几个层中保留名称。
请注意,这只有在foreach的参数为.inorder=T
(这是默认值)时才能正常工作。
感谢您的建议。这是我想出了:
foo <- list(a = 1, b = 2)
bar <- foreach (x = foo, n = names(foo), .combine = c) %do% {
rv <- list()
rv[[n]] <- x * 2
rv
}
不确定'foreach'是否具有此功能。然而,你可以改变你的循环为'foreach(i = seq_along(foo)){x < - foo [[i]]; ...}'这将允许您通过'names(foo)[i]'访问每个元素的名称' – konvas 2014-12-03 16:13:56
您也可以使用'x = Map(structure,.Data = lapply(foo,list) names(foo))'来获取循环内的名字,就好像循环使用'['而不是'[['来访问'foo'的元素。 – 2014-12-03 16:24:25