在R中将值从函数绑定到全局环境

jim*_*ako 3 r environments

我在理解如何将值从函数内部绑定到函数外部环境时遇到麻烦。下面显示了一个基本示例,我似乎无法解决函数的最后一部分:

number <- data.frame()

how_many_fruits <- function() {

    answer <- as.integer(readline(prompt="How Many?: "))
    globalenv()$number <- rbind(globalenv()$number, answer)

}
Run Code Online (Sandbox Code Playgroud)

本质上,我想在开始时有一个空的数据框number,并且每次how_many_fruits()运行时,我都希望将输入附加到number数据框的底部。

Sti*_*ibu 5

您可以使用<<-运算符:

number <- data.frame()
how_many_fruits <- function() {

  answer <- as.integer(readline(prompt="How Many?: "))  
  number <<- rbind(number, answer)

}
Run Code Online (Sandbox Code Playgroud)

但是,我想知道您对该程序的目标是什么。函数不应以您使用的方式在全局环境中使用变量。如果有人想使用该函数,但调用该变量num而不是该变量,将会发生什么number?该功能在那种情况下不起作用。因此,我建议您改为执行以下操作:

how_many_fruits <- function(num) {

  answer <- as.integer(readline(prompt="How Many?: "))
  new_num <- rbind(num, answer)

  return (new_num)
}

number <- data.frame()
number <- how_many_fruits(number)
Run Code Online (Sandbox Code Playgroud)

这就是函数的工作方式:它接受输入(在此称为num),并返回输出(在此称为new_num)。请注意,函数内部的输入和输出名称不必与函数外部使用的变量名称相同。当您调用时how_many_fruits(number),的内容number存储在中num,该功能仅适用于后者。并且当您这样做时number <- how_many_fruits(number),作为返回结果的任何内容how_many_fruits(number)都存储在中number。