用于将对象导出到全局环境的便捷功能

krl*_*mlr 2 r convenience-methods

更新:我添加一个变体罗兰的实施kimisc包.

是否有一个便利功能可以将对象导出到全局环境,可以从一个函数调用它来使对象全局可用?

我正在寻找类似的东西

export(obj.a, obj.b)
Run Code Online (Sandbox Code Playgroud)

这会表现得像

assign("obj.a", obj.a, .GlobalEnv)
assign("obj.b", obj.b, .GlobalEnv)
Run Code Online (Sandbox Code Playgroud)

合理

我知道<<-并且assign.我需要这个来重构旧的代码,这只是脚本的串联:

input("script1.R")
input("script2.R")
input("script3.R")
Run Code Online (Sandbox Code Playgroud)

script2.R使用结果script1.R,并script3.R可能使用来自1和的结果2.这会创建一个污染严重的命名空间,我想更改每个脚本

pollute <- the(namespace)
useful <- result
Run Code Online (Sandbox Code Playgroud)

(function() {
pollute <- the(namespace)
useful <- result
export(useful)
})()
Run Code Online (Sandbox Code Playgroud)

作为第一个廉价的对策.

Rol*_*and 7

只需写一个包装器:

myexport <- function(...) {
  arg.list <- list(...)
  names <- all.names(match.call())[-1]
  for (i in seq_along(names)) assign(names[i],arg.list[[i]],.GlobalEnv)
}

fun <- function(a) {
  ttt <- a+1
  ttt2 <- a+2
  myexport(ttt,ttt2)
  return(a)
}

print(ttt)
#object not found error
fun(2)
#[1] 2
print(ttt)
#[1] 3
print(ttt2)
#[1] 4
Run Code Online (Sandbox Code Playgroud)

没有彻底测试,也不确定它是多么"安全".