R débogage: “seulement 0 peut être mélangé avec de négatif indices”

J'ai un script qui fonctionne très bien quand je le lance manuellement dans la R Studio, mais ne fonctionne pas quand je le lance à partir d'un autre programme via un wrapper.

- Je obtenir cette info dans ma sortie de débogage:

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

Si je sauvegarde l'image juste avant que je reçois le message d'erreur et le charger dans la R de Studio, je reçois le même message d'erreur quand j'execute GetTopN(10). Cependant, si je ré-exécuter l'instruction actionlist<- sqlQuery(channel,al_string) dans R Studio, puis exécuter GetTopN(10) tout fonctionne comme il se doit.

J'ai même essayé d'enregistrer l'image dans R Studio juste avant la critique d'appel, puis de le charger via le wrapper avant l'exécution de GetTopN(10) et j'ai eu le même message d'erreur.

J'ai vérifié et toutes les variables pertinentes (crs,z,x,n) ont les bonnes valeurs. Je n'ai aucune idée de ce que pourrait être la cause de cela, et j'apprécierais vraiment de l'aide!

Ici est ce qui est en cours d'exécution (dans l'ordre):

#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)

J'ai sauvé mon espace de travail trop si cela peut aider (4.7 mo): espace de travail
En cas de connexion à ma base de données MYSQL pourrait l'aider, elle doit être ouverte sur 74.73.17.163:3306

Bien que ce n'était pas votre problème - il est intéressant de noter que les choses que code signifie pour les choses qui changent le sens de [i,j], par exemple les données.le tableau peut aussi produire ce genre de message d'erreur lorsqu'ils sont exécutés sur un ensemble de données.cadre. En particulier, dans une situation similaire à la vôtre, où les choses sont en cours d'exécution dans une enveloppe et vous mai n'ont pas réussi à charger le package requis.

OriginalL'auteur Mike Furlender | 2012-02-10