【问题标题】:How can I load my .RProfile using Textmate's R Bundle如何使用 Textmate 的 R Bundle 加载我的 .RProfile
【发布时间】:2010-02-15 14:06:12
【问题描述】:

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

我有一个 .RProfile 文件,位于我的默认“~”启动目录中,其中包含许多有用的功能,我喜欢在编写 R 脚本时访问它。但我也使用 Textmate 进行大部分写作,并使用 cmd-R 功能在 Textmate 中运行我的脚本。

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

有没有办法——最有可能通过 Textmate 的 Bundle 设置——我可以将 Textmate 指向我的 .RProfile,这样我就不必在每个脚本的基础上将我的函数写入每个脚本?

在我编写的任何脚本中包含任何自定义函数实际上是否更好,以便任何具有基本 R 设置的人都可以获取和运行我的脚本?

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

提前非常感谢!

【问题讨论】:

    标签: r


    【解决方案1】:

    R Bundle 开发人员显然正在解决这个问题(请参阅邮件列表中的 Post),但目前不可用。

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

    首先,您可以创建一个新包(例如,“briandk-R”),然后在该包中创建一个带有 'source($1)' 的 sn-p,或者只是硬编码您想要的文件源而不是占位符(例如,“source(”~/some_file_to_source.R“)。如果您执行后者,那么您可以配置 TM 以通过选项卡触发器获取文件(在捆绑编辑器中,切换到“设置”(左上角)并在“范围选择器”字段中键入“source.r,source.rd.console”,然后为您的选项卡触发器选择几个字母(例如,“src.”)

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

    【讨论】:

      【解决方案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}”的一行

      -威尔

      【讨论】:

      • 我没有,因为它是一个 hack,而且需要添加的 LOC 的行号可能在其他人安装的包中有所不同。
      猜你喜欢
      • 2019-05-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多