debugging - R 调试 : "only 0' s may be mixed with negative subscripts"

标签 debugging r

我有一个脚本,当我在 R Studio 中手动运行它时运行良好,但当我通过包装器从另一个程序运行它时不起作用。

我在调试输出中得到了这个信息:

[912] Error in xj[i] : only 0's may be mixed with negative subscripts 
[912] Calls: GetTopN -> cor -> is.data.frame -> [ -> [.data.frame 

如果我在出现错误之前保存图像,然后将其加载到 R Studio 中,则在执行 GetTopN(10) 时会出现相同的错误。 .但是,如果我重新运行语句 actionlist<- sqlQuery(channel,al_string)在 R Studio 中,然后执行 GetTopN(10)一切正常。

我什至尝试在关键调用之前将图像保存在 R Studio 中,然后在执行 GetTopN(10) 之前通过包装器加载它,但我得到了同样的错误。

我检查了所有相关变量(crs、z、x、n)似乎都有正确的值。我不知道这可能是什么原因,我真的很感激一些帮助!

这是正在执行的内容(按顺序):
#INIT:
library(RODBC)
library(stats)

channel<- odbcConnect("data")
crs<-mat.or.vec(3000,5) #will hold correlations
n1<-seq(-33,0)

#Get whole series
z <- sqlQuery(channel,"SELECT RPos,M1,M2,M3,M4 FROM `data`.`z` ")
al_string <- "SELECT RPos,OpenTime FROM z JOIN actionlist on(OpenTime = pTime)"
trim_string<- "DELETE FROM ActionList WHERE OpenTime NOT IN (SELECT OpenTime FROM ReducedList)"

GetTopN<-function(n)
{ 
  for(i in 1:nrow(actionlist))
  {
   crs[i,1]<-actionlist$OpenTime[i]
   for(j in 2:ncol(z)) 
   {
    crs[i,j]<-cor(z[actionlist$RPos[i]+n1,j],x[,j])
   }
  }
  avc <- (cbind(crs[,1],rowSums(crs[,2:5])))
  sorted <- crs[order(avc[,2], decreasing=T),1] 
  topx<- head(sorted,n)
  bottomx <- tail(sorted,n)
  DF<-as.data.frame(c(topx,bottomx),row.names=NULL) 
  colnames(DF)[1]<-'OpenTime'
  sqlSave(channel,dat=DF,tablename='ReducedList',append=F,rownames=F,safer=F) 
  sqlQuery(channel,trim_string)
}


curpTime <- 1275266400
actionlist<- sqlQuery(channel,al_string)

x<- sqlQuery(channel,paste('SELECT pTime,M1,M2,M3,M4 FROM z WHERE pTime <= ',curpTime,' AND 
pTime > ',curpTime,'-(300*34) ORDER BY pTime ASC'))

GetTopN(10)

如果有帮助的话,我也保存了我的工作区 (4.7mb):workspace
如果连接到我的 MYSQL 数据库会有帮助,它应该在 74.73.17.163:3306 上打开。

最佳答案

问题:actionlist$RPos[1000]值为 21。n1范围从 -31 到 0。当您添加它们时,您会得到一个混合了正值和负值的向量,这在子集化中是不允许的。

我是如何到达那里的:首先检查 traceback() :

traceback()
5: `[.data.frame`(z, actionlist$RPos[i] + n1, j) at #8
4: z[actionlist$RPos[i] + n1, j] at #8
3: is.data.frame(x) at #8
2: cor(z[actionlist$RPos[i] + n1, j], x[, j]) at #8
1: GetTopN(10)

这告诉我问题出在 actionlist$RPos[i] + n1最有可能的。然后我就加了一个简单的print(i)声明告诉我哪个迭代是问题。 (或者,您可能只是手动检查了 actionlist$RPos + n1 是否存在故障点。

关于debugging - R 调试 : "only 0' s may be mixed with negative subscripts",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9221310/

相关文章:

c++ - 无法从我的 C++ 应用程序获得输出

javascript - 找到从未命中非库代码的 Backbone.js 事件错误源

python - 在 R 与 Python 中 reshape 数据

r - 如何更改 ggplot 中这个定制设计图例的背景颜色?

从 ggplot2 中的 geom_smooth 中删除线

r - 从 R 的 Rd 文件访问元素?

python - 错误: nothing to repeat at position

memory - 在调试中从地址查找信息

java - 调试执行冒险

python - R中的正则表达式命名组