在一个.R文件中定义所有功能,然后从另一个.R文件中调用它们。如果可能的话如何?


93

如何在另一个文件(例如xyz.R)中调用abc.R文件中定义的函数?

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

Answers:


137

你可以调用source("abc.R")之后source("xyz.R")(假设这两个文件是在当前工作目录。

如果abc.R为:

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

xyz.R是:

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

然后这将工作:

> source("abc.R")
> source("xyz.R")
> fooXYZ(3)
[1] 5
> 

即使存在周期性依赖关系,也可以使用。

例如,如果abc.R是:

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

barABC <- function(x){
    k <- x+30
    return(k)
}

xyz.R是这样的:

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

barXYZ <- function(x){
    k <- barABC(x)+20
    return(k)
}

然后,

> source("abc.R")
> source("xyz.R")
> fooXYZ(3) 
[1] 55
>

9
细微差别:您只需source一次文件/功能。然后它就在您的工作空间中,您可以随时使用它。如果更改它,则必须重新获得它。如果自转换代码以来函数的功能发生了很大变化,请将它们全部放在一个文件中,并且每次都将整个源代码作为源。您还可以有一个单独的较小文件,该文件可以1.提取较大的函数集,然后2.运行测试用例。在R中,有很多方法可以安排您的工作流程。
布莱恩·汉森

5
感谢您的细微差别,布莱恩。我在演示这是来自程序语言的大多数人可能会想知道的2个场景。就像编辑文件以添加循环依赖关系一样,在这种情况下,需要为它们提供资源(如图所示),并且循环不会影响文件的来源。
2012年

谢谢你们俩 @A_K:非常感谢您强调循环依赖问题。帮我节省了一些“可以改进的” R文档的工作时间:)
G Shah 2012年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.