我有一个脚本,当我在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): 工作区
如果连接到我的MYSQL数据库会有所帮助,那么应该打开它 74.73.17.163:3306