回答
這可能是沒有計算它的最快方式,它當然使用更多的資源,但在這裏是一個完全不同對其採取:更仔細地比我做了第一次
> mylist = list(c(0,1), c(1,1), c(3,2))
> a = matrix(unlist(mylist), ncol=2, byrow=T)
> sum(a[,1]-a[,2])
試試這個
# Sum of the first differences of your list
> (Sumlist <- lapply(List, function(x) -sum(diff(x))))
[[1]]
[1] -1 # this is (0-1)
[[2]]
[1] 0 # this is (1-1)
[[3]]
[1] 1 # this is (3-2)
# Total sum of your list
> Reduce('+', Sumlist) # this is (0-1)+(1-1)+(3-2)
[1] 0
+1閱讀周圍! – A5C1D2H2I1M1N2O1R2T1 2013-02-28 20:00:52
或者,你可以做'diff(Reduce('+',List))' – Arun 2013-03-18 18:16:52
如果該模式,第一個減去第二個元素的差異是一致的,那麼只需在致電sapply
或lapply
時寫一個匿名函數。
mylist <- list(c(0,1), c(1,1), c(3,2))
sapply(mylist, FUN = function(x) {x[1] - x[2]}) ## takes differences
sum(sapply(mylist, FUN = function(x) {x[1] - x[2]})) ## put it all together
這也可以實現(如@AnandaMahto和@Jilber使用)與diff
功能。 diff(0, 1)
給出第二個減去第一個,所以我們需要使用-diff
第一個減去第二個。
sum(-sapply(mylist, FUN = diff))
感謝@AnandaMahto將頭像放在一起 – Gregor 2013-02-28 20:21:48
不是很大的粉絲Reduce
,do.call
通常更快。在這種情況下,unlist
解決方案似乎有輕微的優勢:
編輯: @ ds440爲贏!
expr min lq median uq max
1 do.call(sum, lapply(List, function(z) -diff(z))) 63.132 67.7520 70.061 72.7560 291.406
2 ds(List) 6.930 10.5875 11.935 12.7040 51.584
3 Reduce("+", lapply(List, function(x) -sum(diff(x)))) 78.530 81.6100 83.727 87.1915 855.355
4 sum(-sapply(List, diff)) 88.155 91.4260 94.121 97.2005 955.442
5 sum(-unlist(lapply(List, diff))) 57.358 60.4375 61.785 63.5170 145.126
凡ds
是@ ds440包裹在一個函數的方法。
我認爲除了速度之外,易讀性也是一個需要考慮的主要因素。其中,我認爲「減少」至少是「讀者友好」。 – A5C1D2H2I1M1N2O1R2T1 2013-02-28 20:47:43
用於'do.call'解決方案和基準測試。 – 2013-03-04 09:09:36
- 1. 我需要幫助 - 列表和Python
- 2. 新的R,我需要一些幫助總和行
- 3. 需要幫助散列表
- 4. 我需要找幾號這是一個列表的總和
- 5. 需要幫助 - - 表格的行和列的總數
- 6. 需要幫助與排序的陣列
- 7. 需要幫助從列表中刪除到另一個
- 8. 需要幫助的列表框中
- 9. 需要幫助的算法表達列
- 10. 需要幫助的列表框多選
- 11. 需要java編程幫助!
- 12. Android需要編程幫助
- 13. 需要一些序列化的幫助
- 14. 需要幫助wpf應用程序需要5盒的總和
- 15. 需要幫助陣列場
- 16. 需要幫助陣列
- 17. 我需要找到一個表中的列的總值,排除最後一行
- 18. 需要幫助去通陣列的列表和outputing
- 19. 我需要幫助排列撲克牌
- 20. 我需要幫助布爾陣列
- 21. 我需要一些幫助設計一個陣列
- 22. 需要幫助轉化的一種列表到使用LINQ
- 23. 需要幫助找到一個好的設計和架構
- 24. 編程新手,需要一點幫助
- 25. 需要幫助在ruby pry調試中找到總和?
- 26. 需要幫助搜索鏈接列表
- 27. 需要數組列表幫助
- 28. 在SharePoint列表中需要幫助。
- 29. MySQL表列說明需要幫助
- 30. 需要幫助修復CSS四列表
矩陣可以很快,如果這非常快速,我不會感到驚訝......特別是如果您將第二行更改爲'-diff(colSums(a))' – Gregor 2013-02-28 22:47:20
必須是'byrow = TRUE',或者是你的mylist與OPs不同? – adibender 2013-02-28 23:11:52
@adibender'mylist = list(c(0,1),c(1,1),c(3,2))'是的,你完全正確,對不起! – ds440 2013-02-28 23:38:29