Est-il possible de créer de nouveaux noms de variables à la volée?
J'aimerais lire les données d'une liste dans de nouvelles variables avec des nombres à la fin. Quelque chose comme orca1, orca2, orca3 ...
Si j'essaye quelque chose comme
paste("orca",i,sep="")=list_name[[i]]
Je reçois cette erreur
target of assignment expands to non-language object
Y a-t-il une autre solution?
Utilisez assign
:
assign(paste("orca", i, sep = ""), list_name[[i]])
Il me semble que vous auriez peut-être intérêt à utiliser une liste plutôt que d'utiliser orca1
, orca2
, etc., alors ce serait orca[1]
, orca[2]
, ...
Habituellement, vous faites une liste de variables différenciées par rien d’autre qu'un nombre, car ce nombre serait un moyen pratique d’y accéder ultérieurement.
orca <- list()
orca[1] <- "Hi"
orca[2] <- 59
Sinon, assign
est exactement ce que vous voulez.
Ne créez pas de cadres de données. Conservez la liste, nommez ses éléments mais ne la joignez pas.
La principale raison à cela est que si vous créez des variables lors de vos déplacements, vous devrez presque toujours les parcourir plus tard pour effectuer quelque chose d’utile. Là, vous serez à nouveau forcé de parcourir chacun des noms que vous avez créés à la volée.
Il est beaucoup plus facile de nommer les éléments de la liste et de parcourir les noms.
En ce qui concerne attach, sa très mauvaise pratique de programmation en R risque de causer beaucoup de problèmes si vous ne faites pas attention.
Si tu as
varname <- c("a", "b", "d")
tu peux faire
get(varname[1]) + 2
for
a + 2
ou
assign(varname[1], 2 + 2)
for
a <- 2 + 2
Il semble donc que vous utilisiez GET lorsque vous souhaitez évaluer une formule qui utilise une variable (telle qu'une concaténation) et ASSIGN lorsque vous souhaitez affecter une valeur à une variable déclarée.
Syntaxe pour assigner: Assign (x, valeur)
x: un nom de variable, donné sous forme de chaîne de caractères. Aucune contrainte n'est exercée et le premier élément d'un vecteur de caractère de longueur supérieure à un sera utilisé, avec un avertissement.
valeur: valeur à affecter à x.
Une autre solution délicate consiste à nommer les éléments de liste et attach
it:
list_name = list(
head(iris),
head(swiss),
head(airquality)
)
names(list_name) <- paste("orca", seq_along(list_name), sep="")
attach(list_name)
orca1
# Sepal.Length Sepal.Width Petal.Length Petal.Width Species
# 1 5.1 3.5 1.4 0.2 setosa
# 2 4.9 3.0 1.4 0.2 setosa
# 3 4.7 3.2 1.3 0.2 setosa
# 4 4.6 3.1 1.5 0.2 setosa
# 5 5.0 3.6 1.4 0.2 setosa
# 6 5.4 3.9 1.7 0.4 setosa