R:xts的并行计算.文件和矢量



我想在.xts(一列的ETRp(和向量之间创建一个并行计算的循环。期望具有附加列的结果。

xts文件是ETRp

head(ETRp)
ETR[mm/day]
2020-11-01 00:00:00 0.007515922
2020-11-01 00:01:00 0.002171158
2020-11-01 00:02:00 0.005164759
2020-11-01 00:03:00 0.00495627

例如,矢量为:

SCF= c(1,2,3)
Ab= c(1,2,3)

我想应用的公式是这样的。

EIp<- SCF*Ab*ETRp

所以尝试手动进行并行计算:

EIp<-SCF[1]*Ab[1]*ETRp
names(EIp)[1] <-"F1_1"
EIp$"F1_2"<-SCF[2]*Ab[2]*ETRp
EIp[,2]<-SCF[2]*Ab[2]*ETRp
EIp$"F1_3"<-SCF[3]*Ab[3]*ETRp
head(EIp)
F1_1        F1_2        F1_3
2020-11-01 00:00:00 0.007515922 0.007730099 0.010083984
2020-11-01 00:01:00 0.002111002 0.002171158 0.002832295
2020-11-01 00:02:00 0.003849464 0.003959160 0.005164759
2020-11-01 00:03:00 0.004956272 0.005097508 0.006649745
2020-11-01 00:04:00 0.006465297 0.006649535 0.008674379
2020-11-01 00:05:00 0.006972469 0.007171160 0.009354842

但是这非常耗时,所以

应为具有附加列的结果,我试着使用FOR循环,(下面(

for(i in 1:3){
EIp[,i]<-SCF[i]*Ab[i]*ETRp
head(EIp)
ETR[mm/day]
2020-11-01 00:00:00 0.007515922
2020-11-01 00:01:00 0.002171158
2020-11-01 00:02:00 0.005164759
2020-11-01 00:03:00 0.004956272
2020-11-01 00:04:00 0.006649535
2020-11-01 00:05:00 0.009354842

但结果只显示了一列。

简而言之,

这就是我想要使用Loop

F1_1        F1_2        F1_3
2020-11-01 00:00:00 0.007515922 0.007730099 0.010083984
2020-11-01 00:01:00 0.002111002 0.002171158 0.002832295
2020-11-01 00:02:00 0.003849464 0.003959160 0.005164759
2020-11-01 00:03:00 0.004956272 0.005097508 0.006649745
2020-11-01 00:04:00 0.006465297 0.006649535 0.008674379
2020-11-01 00:05:00 0.006972469 0.007171160 0.009354842

但是,这就是我得到的

head(EIp)
ETR[mm/day]
2020-11-01 00:00:00 0.007515922
2020-11-01 00:01:00 0.002171158
2020-11-01 00:02:00 0.005164759
2020-11-01 00:03:00 0.004956272
2020-11-01 00:04:00 0.006649535
2020-11-01 00:05:00 0.009354842

为什么结果中只有一列?

如何获得预期结果(1列XTS和包含3个元素的向量(?我希望它是3列(带有附加列(你能帮我做这个XTS和矢量计算吗?

在R中使用for循环时,最好预先分配(创建(结果对象。然后在循环中用正确的值填充元素。

# setup example
library(xts)
data(sample_matrix)                                                                        
ETRp <- as.xts(sample_matrix, dateFormat = "Date")[, "Close"]
SCF <- c(1, 2, 3) 
Ab <- c(1, 2, 3) 
SCF_Ab <- SCF * Ab
# create the result object
EIp <- matrix(NA, nrow = nrow(ETRp), ncol = length(SCF_Ab))
EIp <- xts(EIp, index(ETRp))
colnames(EIp) <- paste0("F1_", seq_along(SCF_Ab))
# fill in the results
for (i in seq_along(SCF_Ab)) {
EIp[,i] <- ETRp * SCF_Ab[i]
}

head(EIp)
##                F1_1     F1_2     F1_3
## 2007-01-02 50.11778 200.4711 451.0600
## 2007-01-03 50.39767 201.5907 453.5790
## 2007-01-04 50.33236 201.3294 452.9912
## 2007-01-05 50.33459 201.3384 453.0114
## 2007-01-06 50.18112 200.7245 451.6301
## 2007-01-07 49.99185 199.9674 449.9267