Basé sur Unable to writeRaster for signature "rasterPCA", "character", j'ai obtenu deux rasters qui sont PC1 et PC2 d'un tas de variables climatiques. Cependant, indépendamment de la même étendue et de la même résolution, le nombre de cellules diffère dans mon environnement global, lorsqu'il est chargé dans R.erreur: nrow (ref) et nrow (cible) doivent être> 0?
Ci-dessous le code que j'utilise, qui est de l'annexe de Hamann et al., 2015 et je reçois cette erreur:
library(SDMTools) # install package to read and write ESRI ASCII grids
library(yaImpute) # install package for k-nearest neighbour (kNN) search
lg1 <- asc2dataframe("C:\\Users\\rameshv\\LGM\\4_PCAforR\\PC_1.asc") # principal component grids
lg2 <- asc2dataframe("C:\\Users\\rameshv\\LGM\\4_PCAforR\\PC_2.asc")
present1 <-asc2dataframe("C:\\Users\\rameshv\\Present\\4_PCAforR\\PC_1.asc")
present2 <- asc2dataframe("C:\\Users\\rameshv\\Present\\4_PCAforR\\PC_2.asc")
idxy <- cbind(id=1:nrow(lg1),lg1[,1:2]) # data frame of IDs and XY coords
b <- (max(lg1$var.1)-min(lg1$var.1))/120 # bin size for 120 PC1 bins
l1 <- round(lg1$var.1/b) # convert PC1 to 120 bins via rounding
l2 <- round(lg2$var.1/b) # convert PC2 to <120 bins via rounding
p1 <- round(present1$var.1/b) # same for present PC1
p2 <- round(present2$var.1/b) # same for present PC2
l <- paste(l1,l2) # PC1/PC2 combinations in LGM climate
p <- paste(p1,p2) # PC1/PC2 combinations in present climate
u <- unique(p)[order(unique(p))] # list of unique PC1/PC2 combinations
sid <- c() # empty vector for source IDs
tid <- c() # empty vector for target IDs
d <- c() # empty vector for distances
for(i in u){ # loop for each unique PC1/PC2 combination
lxy <- idxy[which(l==i),] # coordinates of i-th combination in LGM
pxy <- idxy[which(p==i),] # coordinates of i-th combination in present
sid <- c(sid, lxy$id) # append i-th PC1/PC2 combination to previous
if(nrow(pxy)>0){ # kNN search unless no-analogue climate
knn <- data.frame(ann(as.matrix(pxy[,-1]), as.matrix(lxy[,-1]), k=1)$knnIndexDist)
tid <- c(tid, pxy[knn[,1],"id"]) # the IDs of the closest matches
d <- c(d, sqrt(knn[,2])) # their corresponding geographic distances
}
else { # else statement for no-analogue climates
tid <- c(tid, rep(NA,nrow(lxy))) # flag destinations as missing for no analogues
d <- c(d, rep(Inf,nrow(lxy))) # flag distances as infinity for no analogues
}
}
a la fin de la boucle, je reçois l'erreur suivante:
Error in ann(as.matrix(pxy[, -1]), as.matrix(lxy[, -1]), k = 1) :
error: nrow(ref) and nrow(target) must be > 0
Je ne sais pas si cette erreur a quelque chose à voir avec la différence en nombre de cellules? Aucune suggestion?
EDIT:
Basé sur le commentaire de Bastien, j'ai étudié la structure et je reçois ceci:
> str(as.matrix(pxy[,-1]))
num [1:27, 1:2] 8.1 8.14 8.22 8.97 9.01 ...
- attr(*, "dimnames")=List of 2
..$ : chr [1:27] "1" "8" "33" "583" ...
..$ : chr [1:2] "y" "x"
> str(as.matrix(lxy[,-1]))
logi[0 , 1:2]
- attr(*, "dimnames")=List of 2
..$ : NULL
..$ : chr [1:2] "y" "x"
Suggestions?
l'erreur est dans 'ann' fonction de yaImpute qui disent que soit votre ref ou votre ensemble cible sont de taille 0. Run str (as.matrix (pxy [-1]))' et 'str (as.matrix (lxy [, -1]))' pour être sûr que la structure est ok. Vous pouvez avoir un problème plus haut dans votre gestion de données – Bastien
@Bastien C'est intéressant. Tu as raison. Je reçois ce qui précède actuellement. Ajouté aux modifications. Voir au dessus. –
Avez-vous vérifié ce que vous avez dans 'l1' et' l2'? – lbusett