EngrStudent
EngrStudent

Reputation: 2022

how to rename a variable in r, using a composed name

I can make this code:

#set seed
set.seed(848)

#make variables (similar, not same)
myvar_a <- rnorm(n = 100, mean = 1, sd = 2)
myvar_b <- rnorm(n = 100, mean = 2, sd = sqrt(3))
myvar_c <- rnorm(n = 100, mean = 4, sd = sqrt(5))
myvar_d <- rnorm(n = 100, mean = 8, sd = sqrt(8))

#transform variables
for(i in 1:4){
     if(i ==1){
          myvar_1 <- myvar_a
     } else if (i==2) {
          myvar_2 <- myvar_b
     } else if (i==3) {
          myvar_3 <- myvar_b
     }  else {
          myvar_4 <- myvar_b
     } 
}

It gives me this:

enter image description here

Is there a way to do it with "paste" and the loop variable?

In MATLAB there is the eval that treats a constructed character string as a line of code, so I could create sentences then run them from within the code.

Upvotes: 0

Views: 162

Answers (2)

amatsuo_net
amatsuo_net

Reputation: 2448

You can do:

for(i in 1:4){
  let <- if(i == 1) "a" else "b"
  assign(paste0("myvar_", i), get(paste0("myvar_", letters[i])))
}

But as others say, this is not really recommendable.

Upvotes: 1

Roland
Roland

Reputation: 132969

l <- list()

#transform variables
for(i in 1:4){
  if(i ==1){
    l[[paste0("myvar_", i)]] <- myvar_a
  } else if (i==2) {
    l[[paste0("myvar_", i)]] <- myvar_b
  } else if (i==3) {
    l[[paste0("myvar_", i)]] <- myvar_b
  }  else {
    l[[paste0("myvar_", i)]] <- myvar_b
  } 
}

print(l)

Of course, an experienced R user would use lapply instead of the for loop.

Upvotes: 1

Related Questions