2013-05-28 2 views
0

j'ai un petit problème avec l'exécution de mon R-scriptum:Code R-boucle-Bug

sensoren <- read.csv("C:/..../sensors.csv") 
messung <- read.table("C:/.../os.log") 

s1 <- messung$V2 
s2 <- messung$V4 
s3 <- messung$V6 
s4 <- messung$V8 

i <- 1; j <- 1 
while (i <= nrow(messung)){ 
+ while (j <= nrow(sensoren)){ 
+  if (s2[i] == sensoren[j,1] && s3[i] == sensoren[j,2] && s4[i] == sensoren[j,3]){ 
+   print(sensoren[j,5][drop=TRUE]); i <- i + 1; j <- 1;} else {j <- j + 1;}}} 

L'exécution du script, je reçois toujours le message d'erreur: erreur dans + tandis que (j < = nRow (Sensoren)) {: argument non valide à l'opérateur unaire

Espérons que quelqu'un peut m'aider, merci !!

Edit:

J'ai changé mon code et il ressemble maintenant:

while (i <= nrow(messung)){ 
+ while (j <= nrow(sensoren)){ 
+  if (c(s2[i],s3[i],s4[i]) == c(sensoren[j,1], sensoren[j,2], sensoren[j,3])){ 
+   print(sensoren[j,5][drop=TRUE]); i <- i + 1; j <- 1;} else {j <- j + 1;}}} 

Mais toujours le même message d'erreur ...

+3

Peut-être vérifier que votre ensemble de données 'sensoren' a été chargé avec succès. Et vous devriez essayer de vectoriser votre code. – juba

Répondre

0

Il ressemble retourne nRow (Sensoren) NULL , que nrow() fait quand son argument n'est pas une matrice ou une trame de données. Vérifiez que le fichier a été lu comme prévu.

Aussi, j'apprécie que vous n'ayez pas posé de questions à ce sujet, mais l'utilisation de boucles imbriquées n'est pas une façon très "R" de faire les choses parce que R est péniblement lent à ces opérations. Vous voudrez peut-être lire sur merge(), apply() et la vectorisation dans R.

+0

hmm je ne pense pas que ce soit le cas, après avoir lu dans le script nrow (sensoren) me donne une valeur de 15 qui est la bonne. Mais je vais suivre votre conseil et me donnerai une conférence sur la vectorisation, bien que je ne sache pas vraiment si cela va résoudre mon problème. – user2351938

+0

Se pourrait-il que vous écriviez vraiment "+ while" plutôt que "while"? Le message d'erreur dit "+ while", ce qui suggère ceci ... – msp

+0

oh man, vous avez raison, vous ne savez pas pourquoi mais il sera vraiment lu "+ while" par le compilateur, après avoir mis cette ligne dans celle ci-dessus cela fonctionne sans erreurs .... -.- – user2351938