作者clansoda (小笨)
看板R_Language
標題Re: [問題] 迴圈轉向量或apply,關於股票macd技術指標
時間Sat Mar 17 14:27:54 2018
這種方法叫做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
但這只是提供你這個方法,這個方法並不建議使用。
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 36.233.213.57
※ 文章網址: https://webptt.com/m.aspx?n=bbs/R_Language/M.1521268077.A.7B5.html
1F:→ a3236852: 我有試看看,但跟我要的需求好像不太一樣,因為這一樣是從 03/17 15:33
2F:→ a3236852: 外面抓值,答案是65432,但我希望能第一次抓5之後變成6789 03/17 15:36
3F:→ a3236852: 還是很謝謝你花時間讓我更了解匿名函數和apply,受益良多 03/17 15:37
4F:推 andrew43: 好文。 03/22 08:08