3

I am new to R and I am trying to add on to the vector a using both a function and a loop. Here is my code:

add_to_a <- function(num){
  print (paste("This is a: ", paste(a,collapse =" ")))
  for (i in 1:3){
    a <- c(a,"hello")
  }
}

a <- c()

for(i in 1:5){
  a<- add_to_a(i)
}

My output is:

[1] "This is a:  "
[1] "This is a:  "
[1] "This is a:  "
[1] "This is a:  "
[1] "This is a:  "

I was trying to debug this problem and added a print statement:

add_to_a <- function(num){
  print (paste("This is a: ", paste(a,collapse =" ")))
  for (i in 1:3){
    a <- c(a,"hello")
  }
  print (a)
}

a <- c()
for(i in 1:5){
  a<- add_to_a(i)
}
 

This is my output:

[1] "This is a:  "
[1] "hello" "hello" "hello"
[1] "This is a:  hello hello hello"
[1] "hello" "hello" "hello" "hello" "hello" "hello"
[1] "This is a:  hello hello hello hello hello hello"
[1] "hello" "hello" "hello" "hello" "hello" "hello" "hello" "hello" "hello"
[1] "This is a:  hello hello hello hello hello hello hello hello hello"
 [1] "hello" "hello" "hello" "hello" "hello" "hello" "hello" "hello" "hello" "hello" "hello" "hello"
[1] "This is a:  hello hello hello hello hello hello hello hello hello hello hello hello"
 [1] "hello" "hello" "hello" "hello" "hello" "hello" "hello" "hello" "hello" "hello" "hello" "hello" "hello" "hello" "hello"
  

and a is updated at the end as expected:

[1] "hello" "hello" "hello" "hello" "hello" "hello" "hello" "hello" "hello" "hello" "hello" "hello" "hello" "hello" "hello"

Could you help me understand why the outputs in the 2 cases are different?

1 Answers1

1

The reason is because of local or global definition of variable. The function is not needed. Be careful the num variable is not useful.

This solution should work :

a <- c()
for(i in 1:5){
    print(paste("This is a: ", paste(a,collapse =" ")))
    for (i in 1:3){
        a <- c(a,"hello")
    }
}

If you want to do something similar :

add_to_a <- function(a){
    print(paste("This is a: ", paste(a, collapse =" ")))
    for (i in 1:3){
        a <- c(a, "hello")
    }
    return(a)
 }

a <- c()
for(i in 1:5){
    a <- add_to_a(a)
}

For a more complete explanation on local or global variables I advise you to look at this post.

Rémi Coulaud
  • 1,684
  • 1
  • 8
  • 19