【问题标题】:Linking/importing externalized source code in org-mode在 org 模式下链接/导入外部源代码
【发布时间】:2013-08-13 12:54:04
【问题描述】:

这个paper 启发了我查看 Emac 的 org-mode 一点,目前我尝试评估什么更适合编写我的文档:knitr/Sweave(我主要使用 R 进行编程) 或组织模式。

我真正喜欢 knitr 的是 externalize the actual source 的选项(注意:R 脚本中标签/名称的声明似乎已从 ## ---- label ------- 更改为 ## @knitr label;请参阅 ?read_chunk)和“将它们链接到实际的文学编程/可重现的研究文档(而不是实际编写该文档中的代码):

“导入”
<<import-external, cache=FALSE>>=
read_chunk('foo-bar.R') # has label/name 'foo-bar'
@

并通过使用

引用相应的标签来“重复使用”
<<foo-bar>>=
@

问题

这在 org-mode 中是否也可行,还是我必须将实际代码放入 .org 文档中?

我找到了this,但我没有找到任何链接/导入外部源代码文件的具体概念并且能够通过将链接代码放入其中来执行它们

#+BEGIN_SRC R
<linked code>
#+END_SRC

背景

我确实看到这种方法可能会在一定程度上对比识字编程的一般范式。但我喜欢以某种“原子”风格工作,因此我觉得先将文件分开,然后动态地将所有内容混合在一起对我来说更自然。

【问题讨论】:

    标签: r org-mode knitr literate-programming reproducible-research


    【解决方案1】:

    命名代码块会有帮助吗?

     #+NAME: foo-bar
     #+BEGIN_SRC R
       source(foo-bar.R)
     #+END_SRC
    

    然后在您实际需要时评估(即加载)代码:

     #+CALL: foo-bar()
    

    更多详情请见manual

    【讨论】:

    • 对我自己说“呃”!当然,这应该工作!非常感谢!
    • 只是为了确保:这样foo-bar.R 中的代码应该是function(与其他类型的“松散”表达式相反),对吧?因为似乎在#+CALL: 你实际上调用了一个函数。还是() 部分只是将任意代码元素传递/“覆盖”到命名代码块的组织模式方式?
    • #+CALL: 中的名称是您在#+NAME: 中使用的名称,它与您的 R 代码中的实际内容无关(可以是任何内容)。 () 部分是将参数传递给命名代码块的方式,您可以在其中定义标题参数(例如:var n=2),然后您可以执行#+CALL: foo-bar(n=4)(请参阅组织模式手册中的该部分)。跨度>
    • 酷,非常感谢您澄清这一点。那我觉得应该就完美了!
    猜你喜欢
    • 1970-01-01
    • 2012-10-11
    • 1970-01-01
    • 1970-01-01
    • 2013-04-17
    • 2011-06-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多