我正在努力为我的项目更好地使用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文件中使用它们,因为它们与项目相关。毕竟,明天有人可能想知道为什么我这么肯定探索因素1没有用。我想保留那些代码,所以我可以敲出情节或分析或者什么,然后继续,但是没有它每次都重新运行,因为没有理由运行它。同样干净的csv东西。我想要它,记录我对数据做了什么(以及为什么),但我不想每次都重新运行它。我将导入foo-clean.csv。
我在谷歌上搜索并阅读了一堆组织模式邮件列表档案,我能够找到一些想法,但不是我想要的。导出文件时,EXPORT_SELECT_TAGS,EXPORT_EXCLUDE_TAGS非常棒。并且:tangle标头在创建实际源文件时效果很好。我不想做其中任何一个。我只想执行缓冲区。我希望能够以类似的方式定义代码块以便执行或忽略。我想我想找到一种方法来获得一个org变量,例如:
EXECUTE_SELECT_TAGS
这样我就可以简单地标记我的各种代码块并完成它。如果我可以运行该文件,只使用具有特定标签的源块,那就更好了。我找不到办法做到这一点,我想在org-mode中询问/乞求新功能之前我会问。
答案 0 :(得分:8)
:eval头参数可用于限制特定代码块的评估。 :eval接受两个参数“never”和“query”。 :eval永远不会确保永远不会评估代码块,这对于防止危险代码块的评估非常有用。 :无论org-confirm-babel-evaluate变量的值如何,eval查询都需要查询代码块的每次执行。
所以你只需要添加
:eval never
到你不想执行的块的标题,并且voilá!
答案 1 :(得分:1)
虽然我从来没有得到我的问题的答案,但讨论很有趣,显然基于组织模式的模板对于一些人来说是一个有趣的想法。我将源代码下载到org-mode并查看了org-babel-execute-buffer。正如我所担心的那样,它是一个天真的功能,它完全按照它所说的那样做,仅此而已。 (目前)不能传递任何其他参数来影响它的行为。 (除非我严重误读了lisp,这完全有可能。)
最终,我认为有用的R模板系统不需要org-babel-execute-buffer。 Babel的noweb功能非常灵活,我认为可以使用noweb构建一个可行的解决方案,而不是尝试开发一个复杂的标记模式来定义如何/何时运行。
对于纠结/导出,仍然可以使用标签来创建可用/合理的输出。
对于任何感兴趣的人:LiterateR
使用这个帖子把它放在那里可能有点粗鲁,但这就是我首先提出问题的原因。 TemplateR是我尝试使R更容易使用。现在,只是一个具有两个简单功能的模板。我认为这是一个概念证明。最终,我想开发一些能够帮助人们更快地开发R项目的东西。 TemplateR将通过以下方式实现: 1.提供强大的结构来发展。 2.提供内置功能,为常见任务提供支持,特别是在可重复研究领域。 3.提供经过测试的代码片段,可以快速重新用于当前项目。
现在,它提供的只是一个基本结构/框架和两个简单的功能。 1.确定缺少哪些R包(基于手动输入到表中的内容)和 2.创建项目目录(图表,数据,报告)。
未来的版本会有更多内容。 README.org和TODO.org进一步详细说明。