首页 > 解决方案 > 无法使用 R 中的循环和函数更新向量

问题描述

我是 R 新手,我正在尝试使用函数和循环添加到向量 a 中。这是我的代码:

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)
}

我的输出是:

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

我试图调试这个问题并添加了一个打印语句:

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)
}
 

这是我的输出:

[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"
  

并且 a 按预期在最后更新:

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

你能帮我理解为什么这两种情况下的输出不同吗?

标签: r

解决方案


原因是由于变量的局部或全局定义。不需要该功能。小心这个num变量没有用。

该解决方案应该有效:

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

如果你想做类似的事情:

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)
}

有关局部或全局变量的更完整解释,我建议您查看这篇文章


推荐阅读