J'essaie d'obtenir des coordonnées GPS pour chaque espèce dans une trame de données de noms d'espèces donnée en utilisant une fonction spécifique au paquet (Red :: records) qui extrait les coordonnées d'une base de données contenant des informations à propos des distributions d'espèces.R: Pour l'erreur de copie de boucle
Ma Pour boucle est construite ci-dessous, où les itérations sont les nRow (noms) et les enregistrements de fonction renvoie les coordonnées lat/long:
for(i in 1:iterations){
gbif[i,1] <- names[i,] ## grab names
try(temp1 <- records(names[i,]))
try(temp1$scientificName <- names[i,])
try(temp2 <- merge(gbif, temp1, by.x="V1", by.y="scientificName"))
datalist[[i]] <- temp2
}
Après l'exécution de cette boucle, je suis en mesure d'obtenir des données pour les espèces ; cependant, il n'est pas correctement fusionné avec la liste de noms. Par exemple, appeler des enregistrements ("Agyneta flibuscrocus") renvoie correctement 5 coordonnées lat/long uniques alors que l'appel des enregistrements ("Agyneta mongolica") produit une erreur avec 0 enregistrements trouvés (ceci est valide pour chaque espèce).
Après cette boucle, je lie tous les enregistrements obtenus en une seule trame de données en utilisant:
dat = do.call(rbind, datalist) ## merge all occurrence data from GBIF into
one data frame
dat <- unique(dat)
Quand je vais vérifier cette trame de données, je reçois les données exemple suivant:
Agyneta flibuscrocus -115.58400 49.72
Agyneta flibuscrocus -117.58400 51.299
...
Agyneta mongolica -115.58400 49.72
Agyneta mongolica -117.58400 51.299
Ces réplications erronées sont également répétées dans le reste des 200 noms. En guise de note, j'ai tout enveloppé dans les instructions try parce que le code ne s'exécutera pas s'il s'exécute dans un enregistrement qui produit 0 résultats à partir de la base de données. Je sens que je suis en train de négliger quelque chose de très évident ici?
Reproductibles données & code:
install.packages("red")
library(red)
names = data.frame("Acantheis variatus", "Agyneta flibuscrocus", "Agyneta
mongolica", "Alpaida alticeps", "Alpaide venilliae", "Amaurobius
transversus", "Apochinomma nitidum")
iterations = nrow(names)
datalist = list()
temp1 <- data.frame() ## temporary data frame for joining occurrence data
from GBIF
for(i in 1:iterations){
gbif <- names[i,] ## grab name
try(temp1 <- records(gbif))
try(temp1$V1 <- gbif)
datalist[[i]] <- temp1
}
dat = do.call(rbind, datalist)
S'il vous plaît fournir quelques exemples de données comme décrit [ici] (https://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example). –
@tobiasegli_te Mon mauvais, merci de me garder en ligne :) –