首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为R用户定义函数中while循环外部的变量赋值

为R用户定义函数中while循环外部的变量赋值
EN

Stack Overflow用户
提问于 2021-06-18 00:27:25
回答 2查看 18关注 0票数 0

在用户定义的函数中使用以下代码时,我似乎遇到了变量赋值问题。

当直接在R会话中使用时,下面的代码运行良好,并产生正确的输出:

代码语言:javascript
复制
# 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

但是,当尝试将代码包装在函数中时,我得到了错误的输出:

代码语言:javascript
复制
# 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函数时,我仍然得到了错误的输出:

代码语言:javascript
复制
# 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)
}

如何在函数中插入上面提到的第一段代码并获得相同的输出?

EN

回答 2

Stack Overflow用户

发布于 2021-06-18 00:31:54

只需删除全局赋值运算符<<-,并将其替换为本地<-

代码语言:javascript
复制
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
票数 0
EN

Stack Overflow用户

发布于 2021-06-18 00:42:44

<<-赋值给全局环境。当您在fn()中调用n_final时,R首先在函数环境中搜索一个名为n_final的变量,然后它会找到:

代码语言:javascript
复制
n <- 1
n_final <- n
# ie. n_final is always 1 in the fn() environment

您的错误的一个解决方案是使用<-

代码语言:javascript
复制
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()

预期输出的结果:

代码语言:javascript
复制
#> 1 2 3
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68023189

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档