2015-11-01 83 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))