有沒有辦法讓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