Re: [問題] 迴圈轉向量或apply,關於股票macd技術指標

作者: clansoda (小笨)   2018-03-17 14:27:54
這種方法叫做anonymous function,在配合sapply與lapply這兩個function上有
很好的效果,不需要在外頭定義一個function並賦予variable name再使用apply
家族的functions,其實類同於python的lambda。
data <- c(1, 3, 5, 7, 9) # 簡單的資料
data <- sapply(1 : 5, function(k) {
data[k] + 1
})
上面的這個k函數是你可以隨便給予的一個暫時的variable
這個值會接下來暫代你前面的資料,也就是1、2、3、4、5
這個apply會跑5次,因為你的資料給進去的長度是5
第一次跑的時候他看到你的資料是1,所以這時候k就是1
我給的指令是幫我算data這個向量裡面的第一個值 + 1
所以是data[1] + 1,第二項是data[2] + 2
做了五次,所以最後的結果是1 + 1, 3 + 1, 5 + 1....
如果你不assign給一個varaible,他的預設就是print出來
所以上面如果不給data這個variable他就會print 2, 4, 6, 8, 10
跟迴圈一樣,你不一定要跟k有關係,可能他就是拿來定義要跑的次數的
sapply(1 : 5, function(k) {
"I Love You"
})
這個型態一樣可行,一般建議不需要更改function外的variable才使用apply
要更改function外的variable用for loop,兩個雖然有時可以交換使用,但各
有適合的地方。如果你真的很想在這邊用apply,下面這個做法可能可行
data <- c(5, 4, 3, 2, 1)
sapply(1 : 5, function(k) {
data[k] <<- data[k] + 1
})
這是一種可行的方案,你也不需要assign variable
但這只是提供你這個方法,這個方法並不建議使用。
作者: a3236852 (serena)   2018-03-17 15:33:00
我有試看看,但跟我要的需求好像不太一樣,因為這一樣是從外面抓值,答案是65432,但我希望能第一次抓5之後變成6789還是很謝謝你花時間讓我更了解匿名函數和apply,受益良多
作者: andrew43 (討厭有好心推文後刪文者)   2018-03-22 08:08:00
好文。

Links booklink

Contact Us: admin [ a t ] ucptt.com