作者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/cn.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