pourquoi R ne reconnaît pas les colonnes et les lignes comme ils sont censés être?

Le code ci-dessous est d'extraire les valeurs d'une région et d'écrire cela dans un fichier texte (il y a 365 fichiers binaires dans le répertoire). Le problème auquel je suis confronté est que tous mes fichiers sont binaires avec une taille de 360 ​​lignes et 720 colonnes. J'ai précisé que dans cette ligne:

file2 <- matrix(data=file,ncol=720,nrow=360) 

mais j'ai une erreur

Erreur dans la moyenne (fichier2 [X, Y], na.rm = VRAI): indice hors limites.

et puis j'ai réécrit la ligne ci-dessus comme:

file2 <- matrix(data=file,ncol=360,nrow=720)

Je mets ncol = 360 et nrows = 720 ce qui n'est pas correct. Mais cela a fonctionné et je n'ai eu aucune erreur. Cependant, les résultats n'étaient pas corrects.

X <- c(364:369) ;   Y <- c(82:92) #####   for sellected region
extract <- vector()
dir1 <- list.files("C:\\Users\\Climate_Rad_f_GAMMA_%d.img", full.names = TRUE)
listfile<-dir1()
for (i in c(1:365))
{
    conne <-  file(listfile[i], "rb")
    file <-  readBin(conne, double(), size=4,  n=720*360, signed=T)
    file2 <-  matrix(data=file,ncol=720,nrow=360)  
extract[i] <- mean(file2[X,Y],na.rm=TRUE)
    close(conne)
    write.table(extract,"C:\\Users\\sam.txt")
}
0
Les lecteurs de cette question devraient savoir qu'il a été posté aujourd'hui sur r-help et a apparemment reçu une réponse: La clé étant que les fichiers binaires devaient être lus correctement et que les index x 364: 369 causaient la ligne R, col order pour "[" accès pour lancer l'erreur.
ajouté l'auteur 42-, source
ne pouvez-vous pas mieux formater le code?
ajouté l'auteur betabandido, source
J'ai essayé de sauver cette question, mais je devais faire une supposition ou deux sur une partie de votre code. Veuillez le vérifier pour vous assurer qu'il reflète bien votre question.
ajouté l'auteur joran, source
Ce serait bien si le PO était disposé à afficher la réponse de r-help comme réponse ici.
ajouté l'auteur Ben Bolker, source

1 Réponses

Dans ce code:

mean(file2[X,Y],na.rm=TRUE)

Vous sélectionnez les lignes X et Y. Vous n'avez que 360 ​​lignes. Vous pourriez vouloir cela à la place:

mean(file2[Y,X],na.rm=TRUE)
0
ajouté
Merci.Je l'ai fait.Je pense que mon problème est que les données sont générées par C ++ comme float32.Je les définis ici comme double. R juste avoir un entier, double, réel. Peut-on savoir lequel de ceux-ci représentent float32.
ajouté l'auteur Sami Yemein, source