只有.R文件中的源函数

时间:2014-10-28 23:31:49

标签: r

我希望source()仅在.R文件中查找和加载函数。

例如,在Analysis.R文件中:

print.hw <- function() {
    print("hello world")
}

x <- 1 + 2
...

当我source("Analysis.R")时,它会创建函数print.hw,但也会分配x,这是我不想要的。

有人有什么想法吗?我能找到的最好的就是这个问题:

Source only part of a file

2 个答案:

答案 0 :(得分:6)

这不使用正则表达式。它也可能比正则表达式解决方案的计算效率更低。它创建一个新环境,获取整个文件,然后仅将函数返回给全局环境。

SourceFunctions<-function(file) {
  MyEnv<-new.env()
  source(file=file,local=MyEnv)
  list2env(Filter(f=is.function,x=as.list(MyEnv)),
           envir=parent.env(environment()))
}

答案 1 :(得分:0)

我认为在源文件结束之前将测试代码分开是很好的做法(就像我们在Python中通常那样),然后使用外部脚本或包(如testthat)调用它们。哈德利的dplyr可能会给你一个参考。