J'ai deux objets:
1982; "1982-11-02" 1984; "1984-11-06" 1986; "1986-11-04"
Et
for (i in ElectionDay){
for (k in ElectionYear){
print(i); print(k)
}}
Je veux lancer une boucle for qui change i et k en même temps évaluer. C'est ce que j'ai jusqu'à présent et je sais que c'est faux.
ElectionYear <- seq(from=1982, to=1986, by = 2)
Je veux que la sortie ressemble à ceci:
ElectionDay <- c( "1982-11-02",
"1984-11-06",
"1986-11-04")
Je ne veux pas qu'il revienne là où il exécute tout i pour chaque valeur de k comme il le ferait dans une boucle normale.
3 Réponses :
Il existe plusieurs façons de procéder. Mais d'abord, vous devez indiquer de ... à que vous souhaitez interagir, donc ce serait une partie 1: length (ElectionDay) .
Vous pouvez utiliser code> lubridate pour coller l'année de votre objet ElectionDay puis l'utiliser dans la boucle.
for (i in 1:length(ElectionDay)){
cat(paste0(year(ElectionDay[i])), ";", paste0('"', ElectionDay[i], '"'), "\n")
}
#1982 ; "1982-11-02"
#1984 ; "1982-11-02"
#1986 ; "1982-11-02"
qui renvoie: p>
#[1] "1982 ; 1982-11-02" #[1] "1984 ; 1984-11-06" #[1] "1986 ; 1986-11-04"
Si vous voulez retirer les années et le point-virgule, vous pouvez utiliser cat à la place, comme @ jay.sf l'a dit:
library(lubridate)
ElectionDay <- c( "1982-11-02",
"1984-11-06",
"1986-11-04")
for (i in 1:length(ElectionDay)){
print(paste(year(ElectionDay[i]), ";", ElectionDay[i]))
}
Vous pouvez utiliser cat et paste0 dans la boucle.
1982; "1982-11-02" 1984; "1984-11-06" 1986; "1986-11-04"
Le \ n donne le nouvelle ligne.
Comme @markus l'a souligné, nous pouvons éviter la boucle for en faisant:
cat(paste(ElectionYear, paste0('"', ElectionDay, '"'), sep = "; "), sep = "\n")
Résultat
for(i in 1:3) {
cat(paste0(ElectionYear[i], ";"), paste0('"', ElectionDay[i], '"'), "\n")
}
Une option pour éviter la boucle que vous voudrez peut-être ajouter dans votre réponse est cat (paste (ElectionYear, ElectionDay, sep = ";"), sep = "\ n")
Le sep = "\ n" est chouette, merci !! Les citations manquaient cependant.
Impressionnant! Merci à tous pour vos réponses utiles!
Je ferais cela avec mapply:
a <- mapply(function(i,k){
print(i)
print(k)
}, ElectionDay, ElectionYear)
mapply prend des vecteurs et appelle une fonction avec chaque élément des vecteurs comme arguments. (L'affectation à a est simplement de supprimer la sortie de mapply)
Que voulez-vous dire change i et k au même rythme ? Peut-être recherchez-vous
ElectionYear [match (gsub ('-. *', '', ElectionDay), ElectionYear)]?Dans votre code
kn'est pas défini. Vous pouvez extraire l'année de la date.Vous avez raison. Je l'ai corrigé.