r - 无法使用 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"
你能帮我理解为什么这两种情况下的输出不同吗?
解决方案
原因是由于变量的局部或全局定义。不需要该功能。小心这个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)
}
有关局部或全局变量的更完整解释,我建议您查看这篇文章。