簡體   English   中英

無法在 R 中使用循環和 function 更新向量

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

我是 R 的新手,我正在嘗試使用 function 和循環添加到向量 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)
}

我的 output 是:

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

這是我的 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"
  

並且 a 按預期在最后更新:

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

你能幫我理解為什么這兩種情況下的輸出不同嗎?

原因是由於變量的局部或全局定義。 不需要 function。 小心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)
}

有關局部或全局變量的更完整解釋,我建議您查看這篇文章

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM