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

看板R_Language作者 (小笨)時間6年前 (2018/03/17 14:27), 編輯推噓1(103)
留言4則, 2人參與, 6年前最新討論串2/2 (看更多)
這種方法叫做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://www.ptt.cc/bbs/R_Language/M.1521268077.A.7B5.html

03/17 15:33, 6年前 , 1F
我有試看看,但跟我要的需求好像不太一樣,因為這一樣是從
03/17 15:33, 1F

03/17 15:36, 6年前 , 2F
外面抓值,答案是65432,但我希望能第一次抓5之後變成6789
03/17 15:36, 2F

03/17 15:37, 6年前 , 3F
還是很謝謝你花時間讓我更了解匿名函數和apply,受益良多
03/17 15:37, 3F

03/22 08:08, 6年前 , 4F
好文。
03/22 08:08, 4F
文章代碼(AID): #1QhBLjUr (R_Language)
文章代碼(AID): #1QhBLjUr (R_Language)