我正在尝试确定最近的位置来表示近距离位置(cP)。
假设我有以下内容:
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 :(得分:0)
您收到该错误,因为您尝试分配长度为零的值。将这行代码print(which(cP[c((i):(length(indicator.Trade)-1))]==-1))
放在else if()
块中,看看错误来自那里。这是因为:
用于获取两个数字之间的序列。在这里,您尝试获取具有空值的序列,这是无效的操作。它发生在else if
块中的第12列。我也在下面的代码中添加了print语句。
尝试这个小练习,看看发生了什么
a1 <- NULL # create a null variable
1:a1 # generate sequence using `:`
# Error in 1:a1 : argument of length 0
这就是我在for循环中使用seq_len
函数的原因。阅读?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