简体   繁体   English

无法在 R 中使用循环和 function 更新向量

[英]Unable to update vector using loop and function in R

I am new to R and I am trying to add on to the vector a using both a function and a loop.我是 R 的新手,我正在尝试使用 function 和循环添加到向量 a 中。 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:我的 output 是:

[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:这是我的 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:并且 a 按预期在最后更新:

[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?你能帮我理解为什么这两种情况下的输出不同吗?

The reason is because of local or global definition of variable.原因是由于变量的局部或全局定义。 The function is not needed.不需要 function。 Be careful the num variable is not useful.小心num变量没有用。

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 .有关局部或全局变量的更完整解释,我建议您查看这篇文章

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM