定义的所有功能于一身.R文件,从另一个.R文件调用它们.如果可能的话怎么样?

G S*_*hah 87 scope namespaces r file user-defined-functions

如何调用另一个文件中abc.R文件中定义的功能,说xyz.R?

甲补充问题是,如何调用从R提示/命令行中abc.R定义的函数?

A_K*_*A_K 125

您可以调用source("abc.R")后跟source("xyz.R")(假设这两个文件都在您当前的工作目录中).

如果abc.R是:

fooABC <- function(x) {
    k <- x+1
    return(k)
}
Run Code Online (Sandbox Code Playgroud)

和xyz.R是:

fooXYZ <- function(x) {
    k <- fooABC(x)+1
    return(k)
}
Run Code Online (Sandbox Code Playgroud)

然后这将工作:

> source("abc.R")
> source("xyz.R")
> fooXYZ(3)
[1] 5
> 
Run Code Online (Sandbox Code Playgroud)

即使存在周期性依赖关系,这也会有效.

例如,如果abc.R是这样的:

fooABC <- function(x) {
    k <- barXYZ(x)+1
    return(k)
}

barABC <- function(x){
    k <- x+30
    return(k)
}
Run Code Online (Sandbox Code Playgroud)

和xyz.R是这样的:

fooXYZ <- function(x) {
    k <- fooABC(x)+1
    return(k)
}

barXYZ <- function(x){
    k <- barABC(x)+20
    return(k)
}
Run Code Online (Sandbox Code Playgroud)

然后,

> source("abc.R")
> source("xyz.R")
> fooXYZ(3) 
[1] 55
>
Run Code Online (Sandbox Code Playgroud)

  • 细微差别:你只需要"源"一次文件/功能.然后它就在您的工作区中,您可以随时使用它.如果您更改它,则必须重新获取它.如果您的函数在转换代码时发生了很大的变化,请将它们全部放在一个文件中,并且每次都只需要整个代码.您还可以拥有一个单独的较小文件,其中包含较大的函数集合和2.运行您的测试用例.在R中,有很多方法可以安排您的工作流程. (8认同)
  • 谢谢你的细微差别,布莱恩.我将此作为两种场景进行演示,大多数来自过程语言的人可能会对此感到疑惑.就像编辑文件以添加循环依赖关系一样,在这种情况下,它们需要被资源化(如图所示)并且循环不会影响文件的来源. (5认同)
  • 我退休后刚开始学习R。这太棒了! (2认同)