[英]R Error: replacement has length zero
我正在尝试确定最接近的位置以指示平仓(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)
正如R中的简单for循环中所建议的那样,R中会产生“替换长度为零”来检查numeric(0),但事实并非如此。 我在这里想念什么?
编辑
我才意识到
head(which(cP[c(((length(indicator.Trade)-1)):(length(indicator.Trade)-1))]==1),1)
[1] 1
因此,我用于查找正确索引位置的代码将是错误的。 但是,我仍然期望它能够运行。
您正在收到该错误,因为您正在尝试分配长度为零的值。 将这行代码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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.