如何管理R程序,其中函数存储在不同的源文件中

时间:2016-04-12 08:33:15

标签: r

我终于到了使用R的地步,我的程序不再是成熟的命令行脚本,而是实际代码。在这一点上,我认为将主代码使用的所有函数保存在同一个源文件中是没有意义的。现在,如果我理解正确,从文件myfunction中存储的脚本中使用存储在文件hereliesfunction.r中的函数myscript.r的方法是添加行

source("hereliesfunction.r")

在文件myscript.r中,在使用myfunction的脚本代码部分之前。

  1. 这是R中的正确方法吗?
  2. 我的主代码使用的每个函数是否需要不同的源命令?我猜它可以“递归地”工作,即我可以将source命令放入其中 hereliesfunction.rmyfunction使用其他功能。
  3. myfunction返回时会发生什么?做其他这些 函数保留在内存中,也可以被主代码访问,或者它们是否像myfunction创建的任何其他对象一样被销毁?
  4. 最后,是否有关于是否存储所有的指南 主代码在与main相同的目录中使用的函数 代码,还是没有?

2 个答案:

答案 0 :(得分:2)

一旦你{R}文件obj['someKey'] = [],它就会运行该文件中的所有命令。如果它包含一个函数定义,它会将它存储到全局环境中,直到你删除它或关闭R会话为止(所以3.,是)。

你的整个帖子是尖叫 R包。正如@docendodiscimus指出的那样,你应该投入一些时间来开发一个包。它不仅可以将代码保存在一个地方,易于维护,而且还提供了一个很好的平台,可以通过帮助文件和插图来记录代码(可能是代码开发/分析中最重要的部分),并通过本地提供简单的版本控制和远程存储库(git,svn ...)。

答案 1 :(得分:1)

  • [关于采购]这是R中的正确方法吗?

是的但是在中期,考虑按照@docendo discimus的说明建立一个包。 devtools::create()如果你使用RStudio Projects > New package是你的朋友。 Hadley的R-pkg让学习构建软件包变得简单,并且个人是R中有史以来最好的投资。另外,编写和编写教程/小插图和编写测试总是有用的:乍一看可能很耗时,但是你很可能很快就会从中受益(更好地理解你的代码,意识到你可以改进包架构等)。

  • 我的主代码使用的每个函数是否需要不同的源命令?

位于源文件中的所有函数以及更大范围的代码将在R中执行(因此函数将被声明并可用,您可以使用ls()

进行检查
  • 我猜它“递归地”工作,即我可以在hereliesfunction.r中放置源命令让myfunction使用其他函数。

  • 当我从myfunction返回时会发生什么?这些其他功能是否仍然保留在内存中,也可以被主代码访问,或者它们是否像myfunction创建的任何其他对象一样被销毁?

不确定但可能与以前的观点有关。

  • 最后,是否有关于是否将主代码使用的所有函数存储在与主代码相同的目录中的指南?

只要source的路径是正确的,您就可以将它们存储在任何地方。但是将所有函数存储在同一目录中(或者在子文件夹中,例如/code)通常是更好的做法,这样您只需更改一次工作目录(或者如果您使用RStudio的项目,则甚至不会需要打扰,你只需打开项目),作为副作用,只要一个人在同一个目录中工作,相对路径仍然可以工作。因此你可以与Dropbox或其他人共享文件夹,这样可以简化协作

同样,在中期或许多项目使用相同的源文件时,编写一个包(供您自己使用,或在GitHub或CRAN上共享或...)可能是个好主意。