在用户定义的函数中使用以下代码时,我似乎遇到了变量赋值问题。
当直接在R会话中使用时,下面的代码运行良好,并产生正确的输出:
# Code 1
n <- 1
n_final <- n
while(n < 3){
n_new <- n + 1
n_final <<- c(n_final, n_new); n <- n_new
}
n_final
[1] 1 2 3但是,当尝试将代码包装在函数中时,我得到了错误的输出:
# Code 2
fn <- function(){
n <- 1
n_final <- n
while(n < 3){
n_new <- n + 1
n_final <<- c(n_final, n_new)
n <- n_new
}
return(n_final)
}
fn()
# 1在使用assign函数时,我仍然得到了错误的输出:
# Code 3
fn <- function(){
n <- 1
n_final <- n
while(n < 3){
n_new <- n + 1
assign("n_final", c(n_final, n_new), envir = .GlobalEnv)
n <- n_new
}
return(n_final)
}如何在函数中插入上面提到的第一段代码并获得相同的输出?
发布于 2021-06-18 00:31:54
只需删除全局赋值运算符<<-,并将其替换为本地<-
fn <- function(){
n <- 1
n_final <- n
while(n < 3){
n_new <- n + 1
n_final <- c(n_final, n_new)
n <- n_new
}
return(n_final)
}
fn()
[1] 1 2 3发布于 2021-06-18 00:42:44
<<-赋值给全局环境。当您在fn()中调用n_final时,R首先在函数环境中搜索一个名为n_final的变量,然后它会找到:
n <- 1
n_final <- n
# ie. n_final is always 1 in the fn() environment您的错误的一个解决方案是使用<-:
fn <- function(){
n <- 1
n_final <- n
while(n < 3){
n_new <- n + 1
n_final <- c(n_final, n_new)
n <- n_new
}
return(n_final)
}
fn()预期输出的结果:
#> 1 2 3https://stackoverflow.com/questions/68023189
复制相似问题