R 中函数向全局环境的输出

Ran*_*man 6 r function

这可能是基本问题,但我一直无法弄清楚。

所以我有一个函数,它data.frame使用包从 MySQL 数据库中获取多个数据RMySQL并执行几个操作。

我希望它的输出进入全局环境,这样我就可以轻松运行其他函数。

例子

我做了一些阅读,发现<<-可以用于范围界定,但它似乎不起作用。

myfunc <- function() {
  `FETCH DF`
  `FETCH DF1`
  `PERFORM OPERATIONS`
  DF <<- DF
  DF1 <<- DF1
}
Run Code Online (Sandbox Code Playgroud)

我只想DF进入DF1全局环境,这样我就可以执行以下操作

myfunc()
DF <- whateverfunc(DF)
DF1 <- whateverfunc(DF1)
Run Code Online (Sandbox Code Playgroud)

复制

你们可以运行以下命令来重现我的 sim。

myfunc <- function() {
  DF <- data.frame(q = c(503,503,503,503,503), w = c(56,56,56,56,56))
  DF1 <- data.frame(V1 = c("A","B"), V2 = c("C", "D"))

  DF <<- DF
  DF1 <<- DF1
}

myfunc()
Run Code Online (Sandbox Code Playgroud)

Rui*_*das 7

其实很简单。只需考虑环境并分配给.GlobalEnv.

myfunc <- function() {
  DF <- data.frame(q = c(503,503,503,503,503), w = c(56,56,56,56,56))
  DF1 <- data.frame(V1 = c("A","B"), V2 = c("C", "D"))
  .GlobalEnv$DF <- DF
  .GlobalEnv$DF1 <- DF1
}

# only run this if needed
#rm(DF, DF1)

myfunc()
ls(pattern = "DF")
#[1] "DF"  "DF1"
Run Code Online (Sandbox Code Playgroud)

并且没有必要<<-

  • 直接分配给 globalenv 的优点是它可以准确地修改预期的内容,而不会出现干扰环境的可能性。除此之外,它的主要缺点是`&lt;&lt;-`,即可变状态。 (2认同)