2015-11-01 87 views
0

我對R相當陌生,我喜歡理解使用「apply」 - 系列函數來避免循環和自定義函數的概念。不幸的是,我在第一次練習中失敗了。對矢量的每個獨特元素使用approxfun

這是我最小的可重複的例子:

x <- data.frame(Hours=cbind(c(rep(5,5),rep(6,5),rep(7,5),rep(8,5),rep(9,5))),Price=c(cbind(seq(48,50.4, by=0.1),seq(48,52.8, by=0.2),seq(48,55.2, by=0.3),seq(48,57.8, by=0.4),seq(48,60.0, by=0.5))),Volume=seq(10000:10024)) 
f1 <- approxfun(x$Volume,x$Price, rule=2) 
plot(x$Volume, x$Price) 
curve(f1, add=TRUE) 

不過,我想在x$Hour與每一個獨特小時進行approxfun()

我該如何解決這個問題?

謝謝你的幫助。

+1

成語是分裂/應用/組合:分割數據,應用功能,合併結果。 R/* plyr/data.table等具有許多功能:'fns < - lapply(split(x,x $ Hours),function(dat)approxfun(dat $ Volume,dat $ Price,rule = 2)) ;情節(x $ Volume,x $ Price); cols < - 1;對於fn中的(fn)曲線(fn,add = TRUE,col =(cols << - cols + 1))' – jenesaisquoi

+0

我不知道這是可以做到的。大。這對我很有幫助。如果你可以發表你的評論作爲答案,我想接受它作爲對這個問題的答案。 – lammy

+0

很高興你有它的工作,隨時回答,如果你有動力。 – jenesaisquoi

回答

0

該解決方案由雙層提供。

該成語是split/apply/combine:分割數據,應用函數,合併結果。 R/* plyr/data.table等具有許多功能做到這一點:

fns <- lapply(split(x, x$Hours), function(dat) approxfun(dat$Volume, dat$Price, rule=2)); plot(x$Volume, x$Price); cols <- 1; for(fn in fns) curve(fn, add=TRUE, col=(cols<<-cols+1))