我在R(onestep
下面)中有一個函數,它將一個向量作爲參數v
,並返回一個新的向量v
作爲輸出,它是輸入向量的函數。然後我迭代這個功能niter
倍,並保持每次迭代的輸出向量(其不是所有具有相同的長度,並且可以偶爾也結束了具有長度爲0)的另一功能iterate
如下(最小示例):朱莉婭 - 相當於R中的遞歸sapply函數
onestep = function (v) c(v,2*v)
iterate = function (v, niter) sapply(1:niter, function (iter) {v <<- onestep(v)
return(v) })
例子:
v=c(1,2,3)
iterate(v,3)
[[1]]
[1] 1 2 3 2 4 6
[[2]]
[1] 1 2 3 2 4 6 2 4 6 4 8 12
[[3]]
[1] 1 2 3 2 4 6 2 4 6 4 8 12 2 4 6 4 8 12 4 8 12 8 16 24
我想知道什麼是做一個返回朱莉婭所有的中間結果這樣的遞歸函數的緊湊和慣用的方法是什麼?有什麼想法嗎? (道歉,如果這是微不足道的,但我是新來的朱莉婭)
非常感謝 - 這對我來說非常完美!將v作爲全局變量的sapply無論如何都是有點狡猾的:-)非常感謝您的善意幫助! –
@TomWenseleers當然。另外,一般來說,當你從R到Julia時,你會發現你基於各種循環做了很多事情,這通常比矢量化更快。因此,在很多情況下,像'sapply'這樣的東西就不會進入你的腦海。另外,如果您正在尋找性能並且來自R背景,我強烈建議您閱讀Julia的性能指南,並特別注意在您的函數中使用類型轉換(爲簡化說明,此處我沒有這樣做)。 –