2017-01-14 16 views
0

私は、最も近い位置を特定して、近い位置(cP)を示すようにしています。Rエラー:交換に長さがありません

はのは、私は次があるとしましょう:

indicator.Trade=c(1,1,0,0,-1,0,0,0,1,1,0,-1,-1) 
cP=c(NA,NA,1,1,NA,-1,NA,NA,1,NA,NA,1,NA) 

## If indicator.Trade[1] is 1, I want to obtain order.book[1,1]=1 and order.book[2,1]=3. 
## If indicator.Trade[2] is 1, I want to obtain order.book[1,2]=2 and order.book[2,2]=3. 

order.book=matrix(0,nrow=2,ncol=(length(indicator.Trade)-1)) 
for(i in 1:(length(indicator.Trade)-1)){ 
    if((indicator.Trade[i]==1)){ 
     order.book[1,i]=i 
     order.book[2,i]=head(which(cP[c((i):(length(indicator.Trade)-1))]==1),1) 
    } else if(indicator.Trade[i]==-1){ 
     order.book[1,i]=i 
     order.book[2,i]=head(which(cP[c((i):(length(indicator.Trade)-1))]==-1),1) 
    } else { 
     order.book[1,i]=i 
     order.book[2,i]=0 
    } 
} 

しかし、私は次のエラーを取得上記のコードを実行している:

in order.book[2, i] = head(which(cP[c((i):(length(indicator.Trade) - : 
    replacement has length zero 

を私は手動で置き換えてみました:

i=1 and i=(length(indicator.Trade)-1) 

示唆したようにSimple for loop in R producing "replacement has length zero" in Rで数値(0)をチェックするが、そうではないようだ。私はここで何が欠けていますか?

編集

私はちょうど

head(which(cP[c(((length(indicator.Trade)-1)):(length(indicator.Trade)-1))]==1),1) 
[1] 1 

だから、正しいインデックス位置を見つけるための私のコードが間違っているだろうと気付きました。しかし、私はまだそれを実行することを期待しています。

答えて

0

長さゼロの値を割り当てようとしているため、このエラーが発生しています。このコード行をprint(which(cP[c((i):(length(indicator.Trade)-1))]==-1))ブロック内に入れてください。else if()ブロックにエラーがあります。これは、2つの数字の間のシーケンスを取得するために:が使用されるためです。ここでは、無効な操作であるnull値を持つシーケンスを取得しようとしています。これはelse ifブロックの12列目に発生します。以下のコードでprintステートメントを追加しました。

は、私がforループで​​機能を使用する理由です

a1 <- NULL # create a null variable 
1:a1   # generate sequence using `:` 
# Error in 1:a1 : argument of length 0 

何が起こっているかを確認するには、この小さなエクササイズを試してみてください。 ?seq_len?seq_alongのマニュアルページを読んでください。

修正コード

indicator.Trade=c(1,1,0,0,-1,0,0,0,1,1,0,-1,-1) 
cP=c(NA,NA,1,1,NA,-1,NA,NA,1,NA,NA,1,NA) 
len_ind_tr <- length(indicator.Trade) 

order.book <- matrix(0,nrow=2,ncol=len_ind_tr-1)) 

for(i in seq_len(len_ind_tr-1)){ 
    if(indicator.Trade[i] == 1){ 
    order.book[1,i] <- i 
    order.book[2,i] <- which(cP[i:(len_ind_tr-1)] == 1)[1] 
    } else if(indicator.Trade[i] == -1){ 
    order.book[1,i] <- i 
    order.book[2,i] <- which(cP[i:(len_ind_tr-1)] == -1)[1] 
    print(which(cP[i:(len_ind_tr-1)] == -1)) 
    } else { 
    order.book[1,i] <- i 
    order.book[2,i] <- 0 
    } 
} 

order.book 
#  [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11] [,12] 
# [1,] 1 2 3 4 5 6 7 8 9 10 11 12 
# [2,] 3 2 0 0 2 0 0 0 1  3  0 NA 
+0

は私が一度に株を買ってきた場合考えてみましょう:1,3,4を。これは指標である。この場合のトレード。 特定の条件が満たされるたびに株式を売りたいです。したがって、条件が満たされている場合:2,5 ...時間= 2で1から株式を売りたい、時間= 5で3と4から株式を売りたい。それはcPの目的である;条件が満たされたときを示します。希望は私が何をやっているのか説明するのに役立ちます。可能であれば、正しいインデックス位置を取得する方法を知っていますか? – mathnoob

+0

私はあなたがインデックス作成を言うとき、データ構造からサブスクリプトとサブセットの値を参照していると思いますか? – Sathish

+0

サブスクリプトとサブセットは、 '$'、 '[]'、 '[[]]'で行うことができます。それらのうちの1つを、変数 – Sathish

関連する問題