Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
应用某些函数后,获得原始源的X倍的data.frame(或list)_R_Functional Programming_Apply - Fatal编程技术网

应用某些函数后,获得原始源的X倍的data.frame(或list)

应用某些函数后,获得原始源的X倍的data.frame(或list),r,functional-programming,apply,R,Functional Programming,Apply,我对这个问题已经有一段时间了 我想要的是,将一个函数应用于一个被因子分割的data.frame。此数据框有n>2列值,我需要用于此函数 在本例中,该数据集有一列5个因素(a,b,c,d,e),以及两列值(values1,values2)。我想应用一些函数来考虑每一列值(auto.arimafirst和forecast.arima,在本例中)。要播放的数据集如下所示: library(forecast) set.seed(2) dat <- data.frame(factors = lett

我对这个问题已经有一段时间了

我想要的是,将一个函数应用于一个被因子分割的data.frame。此数据框有n>2列值,我需要用于此函数

在本例中,该数据集有一列5个因素(
a
b
c
d
e
),以及两列值(
values1
values2
)。我想应用一些函数来考虑每一列值(
auto.arima
first和
forecast.arima
,在本例中)。要播放的数据集如下所示:

library(forecast)
set.seed(2)
dat <- data.frame(factors = letters[1:5],values1 = rnorm(50), values2 =rnorm(50))
然后使用
rappy

rapply(dat,function(x) forecas.Arima(auto.arima(x)),dat$factors)
lapply(split(dat,dat$factors), function(x) forecast.Arima(auto.arima(x)))
lappy

rapply(dat,function(x) forecas.Arima(auto.arima(x)),dat$factors)
lapply(split(dat,dat$factors), function(x) forecast.Arima(auto.arima(x)))
和其他一些组合,都没有用


我认为最简单的解决方案应该是apply系列中的一个函数,但任何解决方案都是有效的。

这就是您想要的吗

m = melt(dat, id.vars = "factors")
l = split(m, paste(m$factors, m$variable))
lapply(l, function(x) forecast.Arima(auto.arima(x$value)))

i、 e.将数据分为10个不同的帧,然后对
值应用预测

应用
解决方案的问题是,您将整个数据帧传递给
auto.arima
函数,该函数采用向量,因此您需要类似以下内容:

lapply(split(dat,dat$factors), function(df) {
    apply(df[,-1], 2, function(col) forecast.Arima(auto.arima(col)))
})
这会像以前一样在因子上拆分数据帧,然后将
auto.arima
函数包装在
forecast.arima
中,应用于每一列(忽略第一列是因子)。这将返回列表列表(5个因子乘以2个值),因此允许您将
values1
values2
分开


您可以使用
unlist(x,recursive=FALSE)
将其展平为10个列表。

我不完全确定这是否是您的要求,但您可以
数据.frame
“factors”
作为
id.vars
,拆分为
“factors”
变量
列,您将从
melt
中获得,然后
lappy
您在结果列表中的函数。顺便问一下,您想应用
auto.arima
的单变量时间序列是什么?我不清楚。@ColonelBeauvel在这个例子中,我想对每个因子的值1和值2应用auto.arima,你想对值1和值2的10个值应用因子'a'auto.arima吗?@ColonelBeauvel是的,完全正确,对b、c、d和e的过程相同。我会使用plyr作为替代:
ldply(unique(m[,c('factors'、'variable')))、函数(x)…
但是+1谢谢你提供额外的答案。但是,当我尝试按原样使用它们时,第一个会抛出一个错误,而第二个会预测每一点-1,并且它也只给出5个预测,而不是10个(每个因子2个)。