1

次のコードを使用して、日付がマトリックス内のどこにあるかを判断しようとしています:

#portret is a list of daily returns for three different stocks from 1980-01-01 to 2010-12
#13.These dates are listed in the first column of the portret data frame
library(quantmod)
library(FRAPO)
getSymbols(c("F","AA","IBM"),from="1980-01-01", to="2010-12-31")
port=cbind(F$F.Adjusted,AA$AA.Adjusted,IBM$IBM.Adjusted)
portret=returnseries(port,"discrete",trim=TRUE)
portret=data.frame(index(portret),coredata=portret)
date.list=seq.Date(as.Date("1990-10-01"),as.Date("2010-10-01"),by="month")
length(date.list)
#this equals 241
date.index=matrix(0,241,2)
for(i in 1:241){
    date.index[i,]=which(portret[,1]==as.character(date.list[i]),arr.ind=TRUE)}

次のエラーが表示され続けます: 置換の長さはゼロです

お知らせ下さい。

4

1 に答える 1

0

エラーは、条件ステートメントが に評価されたためFALSEです。

すなわち:

  x      <- 1:5
  x[[2]] <- which(FALSE) 

問題は、 のすべての日付が にあるわけではないことdate.listですportret[, 1]
代わりに、forループ内でこれを試してください。

w <- which(portret[,1]==as.character(date.list[i]),arr.ind=TRUE)
date.index[i,] <- ifelse(identical(w, integer(0)), c(NA, NA), w)

しかし、さらに良い:

date.index <- 
  sapply(as.character(date.list), function(D) 
      {w <- which(portret[,1]==D, arr.ind=TRUE);
      ifelse(identical(w, integer(0)), c(NA, NA), w)})
于 2013-04-23T04:12:19.757 に答える