26 votos

Producir una lista de nombre de la variable en un bucle, luego asignar valores a los

Me gustaria saber si hay una forma sencilla de producir una lista de variables mediante un bucle y darle su valor.

for(i in 1:3)
{
  noquote(paste("a",i,sep=""))=i
}

En el código anterior, trato de crear a1 , a2 , a3 , que asignan a los valores de 1, 2, 3. Sin embargo, R da un mensaje de error. Gracias por tu ayuda.

10voto

Marc-Andre R. Puntos 789

Si los valores están en el vector, el lazo no es necesario:

vals <- rnorm(3)
n    <- length(vals)
lhs  <- paste("a",    1:n,     sep="")
rhs  <- paste("vals[",1:n,"]", sep="")
eq   <- paste(paste(lhs, rhs, sep="<-"), collapse=";")
eval(parse(text=eq))

Como nota aparte, esta es la razón por qué me encanta R.

9voto

Brett Veenstra Puntos 10238

Usted está en busca de assign() .

for(i in 1:3){
  assign(paste("a", i, sep = ""), i)    
}

da

> ls()
[1] "a1"          "a2"          "a3" 

y

> a1
[1] 1
> a2
[1] 2
> a3
[1] 3

Actualización

Estoy de acuerdo que usar bucles es codificación de R (muy a menudo) mal estilo (véase la discusión arriba). Using list2env() (thanks to @mbq for mentioning it), this is another solution to @Han Lin Shang's question:

x <- as.list(rnorm(10000))
names(x) <- paste("a", 1:length(x), sep = "")
list2env(x , envir = .GlobalEnv)

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X