如何使用Textmate的R Bundle加载我的.RProfile

时间:2010-02-15 14:06:12

标签: r

这个问题适合那些碰巧在Mac上使用R,与Macromate的[Textmate](http://macromates.com/)文本编辑器和“R”Bundle结合使用的人。不用说,所有这些都很漂亮,但现在不是重点: - )

我有一个.RProfile文件位于我的默认“〜”启动目录中,并且它有许多有用的功能,我希望在编写R脚本时能够访问它。但是我的大部分写作都使用Textmate,而在Textmate中运行我的脚本则使用cmd-R功能。

目前,我不知道如何告诉Textmate我的.Rprofile在哪里。

有没有办法 - 最有可能通过Textmate的Bundle设置 - 我可以将Textmate指向我的.RProfile所以我不必在每个脚本的基础上将我的函数编写到每个脚本中?

OR

在我编写的任何脚本中包含任何自定义函数实际上更好吗,这样任何拥有基本R设置的人都可以获取并运行我的脚本吗?

我觉得我必须在Textmate或它调用来运行我的脚本的R环境中错过一个简单的设置或配置文件。

提前非常感谢!

2 个答案:

答案 0 :(得分:3)

R捆绑开发人员显然正在研究这个问题(请参阅邮件列表中的Post),但目前无法使用。

与此同时,您有几个选择。

首先,您可以创建一个新的包(例如,“briandk-R”),然后使用“source($ 1)”在该包中创建一个片段,或者只是硬编码您要提供的文件占位符(例如,“source(”〜/ some_file_to_source.R“)。如果你执行后者,那么你可以配置TM来通过标签触发器来源文件(在Bundle Editor中,切换到'设置) '(左上角)并在'范围选择器'字段中输入“source.r,source.rd.console”然后为选项卡触发器选择几个字母(例如,“src。”)

如果您不想这样做,请转到“Rdaemon”目录(位于您的主目录或〜/ Library / Application Support / Rdaemon中)。查看此目录,您将看到另一个名为“daemon”的目录。在一个名为“start.r”的文件中列出了从Rdaemon启动R时获取的文件。你知道该怎么做。(注意:这个目录还包含一些其他包含初始设置的脚本;你可能希望看看那些)

答案 1 :(得分:2)

Doug的回应的第一部分提供了最简单的即时解决方案......添加

source('/Users/briandk/.Rprofile')

到你想要那些函数的任何.r文件的头部......用这一行代码,你得到你的实用函数。当然,这只有在您运行整个TM文件时才有用。

理想情况下,捆绑包将被更新......也许是为了通过TM的首选项支持shell变量???

TM_RPROFILE 

可以设置为.Rprofile文件的路径。

我只用2行代码将其破解为tmR.rb。要实现这一点,请转到〜/ Library / Application Support / TextMate / Pristine Copy / Bundles /并显示R.tmbundle的内容

在那里,你会找到support / tmR.rb

在我的版本中,靠近第112行,你应该改变

tmpDir = File.join(ENV['TMP'] || "/tmp", "TM_R")
recursive_delete(tmpDir) if File.exists?(tmpDir) # remove the temp dir if it's already there
Dir::mkdir(tmpDir)

# Mechanism for dynamic reading
# stdin, stdout, stderr = popen3("R", "--vanilla", "--no-readline", "--slave", "--encoding=UTF-8")
stdin, stdout, stderr, pid = my_popen3("R --vanilla --slave --encoding=UTF-8 2>&1")
# init the R slave
stdin.puts(%{options(device="pdf")})
stdin.puts(%{options(repos="#{cran}")})

tmpDir = File.join(ENV['TMP'] || "/tmp", "TM_R")
recursive_delete(tmpDir) if File.exists?(tmpDir) # remove the temp dir if it's already there
Dir::mkdir(tmpDir)

rprofile = (ENV['TM_RPROFILE'] == nil) ? "" : "source('" + ENV['TM_RPROFILE'] + "')"

# Mechanism for dynamic reading
# stdin, stdout, stderr = popen3("R", "--vanilla", "--no-readline", "--slave", "--encoding=UTF-8")
stdin, stdout, stderr, pid = my_popen3("R --vanilla --slave --encoding=UTF-8 2>&1")
# init the R slave
stdin.puts("#{rprofile}")
stdin.puts(%{options(device="pdf")})
stdin.puts(%{options(repos="#{cran}")})

刚刚在那里添加了两行...开头的“rprofile =”和包含“#{rprofile}”的那一行

-Wil