我终于到了使用R的地步,我的程序不再是成熟的命令行脚本,而是实际代码。在这一点上,我认为将主代码使用的所有函数保存在同一个源文件中是没有意义的。现在,如果我理解正确,从文件myfunction
中存储的脚本中使用存储在文件hereliesfunction.r
中的函数myscript.r
的方法是添加行
source("hereliesfunction.r")
在文件myscript.r
中,在使用myfunction
的脚本代码部分之前。
source
命令放入其中
hereliesfunction.r
让myfunction
使用其他功能。 myfunction
返回时会发生什么?做其他这些
函数保留在内存中,也可以被主代码访问,或者它们是否像myfunction
创建的任何其他对象一样被销毁?答案 0 :(得分:2)
一旦你{R}文件obj['someKey'] = []
,它就会运行该文件中的所有命令。如果它包含一个函数定义,它会将它存储到全局环境中,直到你删除它或关闭R会话为止(所以3.,是)。
你的整个帖子是尖叫 R包。正如@docendodiscimus指出的那样,你应该投入一些时间来开发一个包。它不仅可以将代码保存在一个地方,易于维护,而且还提供了一个很好的平台,可以通过帮助文件和插图来记录代码(可能是代码开发/分析中最重要的部分),并通过本地提供简单的版本控制和远程存储库(git,svn ...)。
答案 1 :(得分:1)
是的但是在中期,考虑按照@docendo discimus的说明建立一个包。 devtools::create()
如果你使用RStudio Projects > New package
是你的朋友。 Hadley的R-pkg让学习构建软件包变得简单,并且个人是R中有史以来最好的投资。另外,编写和编写教程/小插图和编写测试总是有用的:乍一看可能很耗时,但是你很可能很快就会从中受益(更好地理解你的代码,意识到你可以改进包架构等)。
位于源文件中的所有函数以及更大范围的代码将在R中执行(因此函数将被声明并可用,您可以使用ls()
是
不确定但可能与以前的观点有关。
只要source
的路径是正确的,您就可以将它们存储在任何地方。但是将所有函数存储在同一目录中(或者在子文件夹中,例如/code
)通常是更好的做法,这样您只需更改一次工作目录(或者如果您使用RStudio的项目,则甚至不会需要打扰,你只需打开项目),作为副作用,只要一个人在同一个目录中工作,相对路径仍然可以工作。因此你可以与Dropbox或其他人共享文件夹,这样可以简化协作
同样,在中期或许多项目使用相同的源文件时,编写一个包(供您自己使用,或在GitHub或CRAN上共享或...)可能是个好主意。