Pour la boucle for ci-dessous, je peux voir toutes les valeurs. Mais quand je lui assigne un nouvel objet, la valeur retournée n'est que la dernière (reportez-vous au dernier code). quelqu'un peut-il m'aider ici s'il vous plaît. N'est-il pas possible d'afficher toutes les valeurs avec l'attribution d'une valeur?
for(i in 1:5)
+ {
+ for(j in 1:2)
+ {
+ as <- i*j
+ }
+ }
A attribué un objet.
for(i in 1:5)
+ {
+ for(j in 1:2)
+ {
+ print(i*j);
+ }
+ }
3 Réponses :
pour l'approche en boucle
Si vous souhaitez ajouter de nouvelles valeurs à comme , vous pouvez essayer de mettre à jour comme par as , qui concatène i * j avec existant comme et le résultat est attribué à comme , c'est-à-dire,
as <- c(t(outer(1:5,1:2)))
approche externe
Un moyen plus efficace d'atteindre le même objectif peut être d'utiliser externe , c'est-à-dire
as <- c()
for(i in 1:5)
{
for(j in 1:2)
{
as <- c(as,i*j)
}
}
Merci vérifiera 😊
Veuillez noter que cette solution est très inefficace et doit être réalisée d'une autre manière.
@Georgery j'ai ajouté une solution efficace
Merci les gars . En fait, j'effectue des tests brillants, il faut donc que ce soit sous la boucle for Laissez-moi vérifier la solution 😊
Voici une façon canonique R de faire ceci:
as.vector(seq(1:2)%*%t(seq(1:5))) [1] 1 2 2 4 3 6 4 8 5 10
Cette approche prend le produit scalaire entre [1,2] et t [ 1,2,3,4,5] . Au lieu d'utiliser des boucles explicites, il a utilisé des vecteurs pour représenter les limites de vos deux boucles d'origine. Le résultat intermédiaire est une matrice, que nous pouvons facilement convertir en un vecteur 1D dans l'ordre des colonnes ou des lignes, en fonction des limites des boucles.
Donc, la boucle for est ici très inefficace. Vous devriez plutôt multiplier les vecteurs. Par exemple,
rep(1:5, each = 2) * 1:2 [1] 1 2 2 4 3 6 4 8 5 10
vous donne
1:2
et si vous multipliez cela par
[1] 1 1 2 2 3 3 4 4 5 5
le vecteur le plus court est recyclé et vous obtenez ceci:
rep(1:5, each = 2)
Où souhaitez-vous stocker toutes les valeurs? La variable factice
asn'est qu'un scalaire et ne peut contenir qu'une seule valeur. La valeur que vous voyez à la fin de la boucle reflète simplement l'affectation finale.Merci pour le commentaire. J'ai besoin de stocker en tant qu'objet.