【问题标题】:Using org-mode to structure an analysis使用 org-mode 构建分析
【发布时间】:2010-11-29 15:59:08
【问题描述】:

我正在努力为我的项目更好地利用 org-mode。我认为识字编程特别适用于数据分析领域,而 org-mode 让我们可以做一些非常棒的识字编程。

我想你们中的大多数人都会同意我的观点,即编写分析的工作流程与大多数其他类型的编程不同。我不只是编写程序,我探索数据。而且,虽然其中许多探索都是死胡同,但我不想完全删除/忽略它们。我只是不想每次执行 org 文件时都重新运行它们。我也倾向于找到或开发我想放入分析模板中的有用代码块,但其中一些块与每个项目都不相关,我想知道如何让 org-mode 忽略这些执行整个缓冲区时的块。这是一个简化的示例。

* Import
  - I want org-mode to ignore import-sql.
#+srcname: import-data
#+begin_src R :exports none :noweb yes
<<import-csv>>
#+end_src

#+srcname: import-csv
#+begin_src R :exports none
data <- read.csv("foo-clean.csv")
#+end_src

#+srcname: import-sql
#+begin_src R :exports none
library(RSQLite)
blah blah blah
#+end_src

* Clean
  - This is run on foo.csv, producing foo-clean.csv
  - Fixes the mess of -9 and -13 to NA for my sanity.
  - This only needs to be run once, and after that, reference.
  - How can I tell org-mode to skip this?
#+srcname: clean-csv
#+begin_src sh :exports none
sed .....
#+end_src

* Explore

** Explore by a factor (1)
   - Dead end. Did not pan out. Ignore.
   - Produces a couple of charts showing there is not interaction.
#+srcname: explore-by-a-factor-1
#+begin_src R :exports none :noweb yes
#+end_src

** Explore by a factor (2)
   - A useful exploration that I will reference later in a report.
   - Produces a couple of charts showing the interaction of my variables.
#+srcname: explore-by-a-factor-2
#+begin_src R :exports none :noweb yes
#+end_src

我希望能够使用 org-babel-execute-buffer 并让 org-mode 以某种方式知道跳过代码块 import-sql、clean-csv 和 explore-by-a-factor-1。我希望它们在 org 文件中,因为它们与项目相关。毕竟,明天有人可能想知道为什么我如此确定 explore-by-a-factor-1 没有用。我想保留该代码,这样我就可以完成绘图或分析或其他任何事情并继续进行,但不是每次我重新运行所有内容时都运行它,因为没有理由运行它。与 clean-csv 一样。我想要它,记录我对数据做了什么(以及为什么),但我不想每次都重新运行它。我将只导入 foo-clean.csv。

我用谷歌搜索了这一切,并阅读了一堆 org-mode 邮件列表档案,我能够找到一些想法,但不是我想要的。导出文件时,EXPORT_SELECT_TAGS、EXPORT_EXCLUDE_TAGS 很棒。在创建实际的源文件时, :tangle 标头效果很好。我不想做这两件事。我只想执行缓冲区。我希望能够以类似的方式定义要执行或忽略的代码块。我想我想找到一种方法来拥有一个 org 变量,例如:

EXECUTE_SELECT_TAGS

这样我可以简单地标记我的各种代码块并完成它。如果我可以然后只使用带有特定标签的源块来运行该文件,那就更好了。我找不到这样做的方法,我想我会在询问/乞求 org-mode 中的新功能之前先询问一下。

【问题讨论】:

  • 对于奇怪的格式感到抱歉。我尝试将“>”放在 org-mode 行的开头,但它仍在尝试格式化文本,看起来很奇怪。如果我能弄清楚如何让 SO 删除格式,我将更新 OP。
  • 使用突出显示区域上的“1010”按钮进行代码格式化——这是我为你解决的问题。
  • 谢谢德克。我没有想到。我回去玩了更多的格式。现在更容易阅读了。
  • 是的,好多了!我喜欢这个问题——我也是 org-mode 的粉丝,但不要将它与 babel 等一起使用。我将 R 会话保留为成绩单,并且经常使用我的 r(来自 littler)前端的脚本。我也使用 Sweave。这可能是一个有效的替代方案。
  • 我想知道标题上的 COMMENT 标签是否有效。我通常使用它来跳过文档部分的导出。

标签: r emacs org-mode


【解决方案1】:

我想通了。来自组织手册:

:eval 标头参数可用于限制特定代码块的评估。 :eval 接受两个参数“never”和“query”。 :eval never 将确保永远不会评估代码块,这对于防止评估危险代码块很有用。 :eval 查询将需要对代码块的每次执行进行查询,而不管 org-confirm-babel-evaluate 变量的值如何。

所以你只需要添加

:从不评估

到您不想执行的块的标题,瞧!

【讨论】:

    【解决方案2】:

    虽然我的问题从未得到答案,但讨论很有趣,显然基于 org-mode 的 R 模板让一些人觉得这是一个有趣的想法。我将源代码下载到 org-mode 并查看了 org-babel-execute-buffer。正如我所担心的那样,它是一个幼稚的函数,它完全按照它所说的去做,仅此而已。 (当前)不可能向它传递任何其他参数来影响它的行为。 (除非我严重误读了 lisp,这是完全可能的。)

    最终,我决定 org-babel-execute-buffer 对于有用的 R 模板系统来说不是必需的。 Babel 的 noweb 功能非常灵活,我认为使用 noweb 构建一个可行的解决方案是可能的,而不是尝试开发一个复杂的标记模式来定义如何/何时运行。

    对于纠结/导出,应该仍然可以使用标签来创建可用/合理的输出。

    有兴趣的朋友:LiterateR

    使用这个帖子把它放在那里可能有点粗鲁,但这就是我首先问这个问题的原因。 TemplateR 是我试图让 R 更易于使用的尝试。现在它只是一个具有两个简单功能的模板。在这一点上,我认为这是一个概念证明。最终,我想开发一些可以帮助人们更快地开发 R 项目的东西。 TemplateR 将通过以下方式完成此操作: 1. 提供一个强大的结构来发展。 2. 提供内置功能,为常见任务提供支持,特别是在可重复性研究领域。 3. 提供可快速重新用于当前项目的测试代码的 sn-ps。

    目前,它提供的只是一个基本结构/框架和两个简单​​的功能。 1. 确定缺少哪些 R 包(基于手动输入到表中的内容)和 2. 创建项目目录(绘图、数据、报告)。

    未来的版本中会提供更多功能。 README.org 和 TODO.org 更详细。

    【讨论】:

    • 已修复。对不起,很慢。我应该早点更新链接。我将模板重命名为 LiterateR。重写了 20 次,才发现自己想要的比 ProjectTemplate 简单多了。不知何故,移动项目是有道理的。在这一点上,我或多或少拥有我认为我想要的结构(我正在进行第 20 次修订)。我有一些东西要添加和清理,我需要清理/修复/改进源代码块 > 中的功能,但是 master 分支应该让您对我现在的想法有一个很好的了解。欢迎评论。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-04
    • 2023-03-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多