如何将源代码包含到R中的函数中?

如何将源代码包含到R中的函数中?,r,function,R,Function,我编写了一个函数并保存在一个.R文件中。 我想在修改另一个.R文件时将代码源代码放在该文件中 例如,我想要的是: 文件1代码: func <- function(x=x) {sum(x)} func试试source(“file1.R”,local=TRUE)。这将使求值发生在函数的范围内,而不是(默认行为)工作区的范围内 但是,正如您目前编写的那样,它仍然不起作用,因为您的file1正在定义一个函数,而不是对它进行求值 要实现您想要的行为,您需要以下内容: ## file1.R ## s

我编写了一个函数并保存在一个.R文件中。 我想在修改另一个.R文件时将代码源代码放在该文件中

例如,我想要的是:

文件1代码:

func <- function(x=x) {sum(x)}
func试试
source(“file1.R”,local=TRUE)
。这将使求值发生在函数的范围内,而不是(默认行为)工作区的范围内

但是,正如您目前编写的那样,它仍然不起作用,因为您的
file1
正在定义一个函数,而不是对它进行求值

要实现您想要的行为,您需要以下内容:

## file1.R ##
s <- sum(x)

## file2.R ##
func2 <- function(x) {
    source("file1.R", local=TRUE)
    return(s)
}
func2(x=c(2,3))
##file1.R##

请注意,这些解决方案的一个显著优点是,它们不会在每次运行
func2
时重新读取file1.R

1)source into workspace源调用将定义func,然后我们将
func2
定义为与
func
相同,最后我们可以选择删除
func
。此时,我们可以运行
func2

source('file1.R')
func2 <- func
rm(func) # optional
func2(x=c(2:3))
3)模块包

从安装模块软件包(此软件包提供了介于
源代码
和完整R软件包之间的中间部分)后,请尝试以下操作:

# devtools::install_github('klmr/modules')

library(modules)

file1 <- import("file1")
func2 <- file1$func
func2(3:4)
#devtools::install_github('klmr/modules'))
图书馆(模块)

file1现在,您的代码创建了一个函数,该函数源于“file1.R”,而不考虑x输入。您需要告诉函数也运行旧函数

func2 <- function(x){
    source('file1.R',local=TRUE)
    func(x)
}

func2另一种选择是,如果您在其他函数中查找文件,则可能是时候开始将这些内容移动到包中了。
# devtools::install_github('klmr/modules')

library(modules)

file1 <- import("file1")
func2 <- file1$func
func2(3:4)
func2 <- function(x){
    source('file1.R',local=TRUE)
    func(x)
}