transport<- structure(list(date = structure(c(1L, 2L, 3L, 4L, 5L, 6L, 7L,
8L, 9L, 10L, 11L, 12L, 1L, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L, 10L,
11L, 12L), .Label = c("01.01.2001", "01.02.2001", "01.03.2001",
"01.04.2001", "01.05.2001", "01.06.2001", "01.07.2001", "01.08.2001",
"01.09.2001", "01.10.2001", "01.11.2001", "01.12.2001"), class = "factor"),
Market_82 = c(7000L, 7272L, 7668L, 7869L, 8057L, 8428L, 8587L,
8823L, 8922L, 9178L, 9306L, 9439L, 3725L, 4883L, 8186L, 7525L,
6335L, 4252L, 5642L, 1326L, 8605L, 3501L, 1944L, 7332L),
transport = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L
), .Label = c("plane", "train"), class = "factor")), .Names = c("date",
"Market_82", "transport"), class = "data.frame", row.names = c(NA,
-24L))
让我们分别为每个组(飞机和火车)创建季节性图
library(forecast)
par(mfrow = c(2, 1))
lapply(split(transport['Market_82'], transport$transport), seasonplot(ts(transport,frequency=12)))
然后我得到了错误
Error in match.fun(FUN) :
'seasonplot(ts(transport, frequency = 12))' is not a function, character or symbol
如何获得两组的季候图?
答案 0 :(得分:1)
lapply
需要一个函数,括号中没有参数。如果您想将其他参数传递给函数,请在函数后列出它们,例如lapply(func, arg1, arg2)
。
此外,seasonplot(ts(transport,frequency=12))
会将平面和 train 数据都绘制到一个图中。
由于在您的示例中,您还想使用ts
构建时间序列对象,因此最好在lapply
中定义的函数中对其进行编码:
尝试:
lapply(split(transport['Market_82'], transport$transport), function(x)seasonplot(ts(x, frequency=12)))
修改
要区分哪个组对应哪个绘图,可以遍历名称:
data = split(transport['Market_82'], transport$transport)
par(mfrow = c(2, 1))
lapply(names(data), function(x)seasonplot(ts(data[[x]], frequency=12), main=x))