1. ホーム
  2. debugging

[解決済み】Rのデバッグ。"負の添え字と混在できるのは0のみ"

2022-01-24 21:36:34

質問

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 データベースに接続すれば、次の場所で開いているはずです。 {コード

解決するには?

問題点 {コード {コード の値は21です。 74.73.17.163:3306

actionlist$RPos[1000]

n1

このことから、問題があるのは traceback()