使用Emacs/ESS用R构建统计分析

使用Emacs/ESS用R构建统计分析,r,emacs,statistics,ess,R,Emacs,Statistics,Ess,我正在寻找一种方法来构建我的统计分析。我目前使用的是Emacs/ESS,分析文件很长。我已经开始将部分代码放入单独文件中的可源代码函数中,但仍然 我想在文件中介绍一些副标题/章节标题(聚合、聚类分析、模拟等等),并在下面编写代码,这样我就可以快速跳转到我想处理的章节 我想我可以使用评论并搜索它们,但我无法通过这种方式获得概述或索引。我还考虑过在标题中使用组织模式,但对于与另一个编辑器一起工作的协作者来说,这不是很方便 我知道R-Studio是通过节来实现的,所以会有一个针对emacs的解决方案,

我正在寻找一种方法来构建我的统计分析。我目前使用的是Emacs/ESS,分析文件很长。我已经开始将部分代码放入单独文件中的可源代码函数中,但仍然

我想在文件中介绍一些副标题/章节标题(聚合、聚类分析、模拟等等),并在下面编写代码,这样我就可以快速跳转到我想处理的章节

我想我可以使用评论并搜索它们,但我无法通过这种方式获得概述或索引。我还考虑过在标题中使用组织模式,但对于与另一个编辑器一起工作的协作者来说,这不是很方便

我知道R-Studio是通过节来实现的,所以会有一个针对emacs的解决方案,对吗

多谢各位


PS:类似imenu的东西可以工作,但这只是用于函数,而不是用于部分。一般来说,我使用组织模式和组织巴贝尔,但是当我必须与其他人共享脚本时,我在
.emacs
中有以下内容:

(defgroup ess-jb-faces nil
  "Faces used by cutomized ess-mode"
  :group 'faces)

(defface ess-jb-comment-face
  '((t (:background "cornsilk" 
    :foreground "DimGrey"
    :inherit font-lock-comment-face)))
  "Face used to highlight comments."
  :group 'ess-jb-faces)

(defface ess-jb-comment-bold-face
  '((t (:weight bold
    :inherit ess-jb-comment-face)))
  "Face used to highlight bold in comments."
  :group 'ess-jb-faces)

(defface ess-jb-h1-face
  '((t (:height 1.6 
    :weight bold 
    :foreground "MediumBlue"
    :inherit ess-jb-comment-face)))
  "Face used to highlight h1 headers."
  :group 'ess-jb-faces)

(defface ess-jb-h2-face
  '((t (:height 1.2 
    :weight bold 
    :foreground "DarkViolet"
    :inherit ess-jb-comment-face)))
  "Face used to highlight h2 headers."
  :group 'ess-jb-faces)

(defface ess-jb-h3-face
  '((t (:height 1.0 
    :weight bold 
    :foreground "DarkViolet"
    :inherit ess-jb-comment-face)))
  "Face used to highlight h3 headers."
  :group 'ess-jb-faces)

(defface ess-jb-hide-face
  '((t (:foreground "white"
    :background "white"
    :inherit ess-jb-comment-face)))
  "Face used to hide characters."
  :group 'ess-jb-faces)

(font-lock-add-keywords 'ess-mode
   '(("^###\\(#\\)\\([^#].*\\)$" (1 'ess-jb-hide-face t)(2 'ess-jb-h1-face t))
     ("^###\\(##\\)\\([^#].*\\)$" (1 'ess-jb-hide-face t)(2 'ess-jb-h2-face t))
     ("^###\\(###\\)\\([^#].*\\)$" (1 'ess-jb-hide-face t)(2 'ess-jb-h3-face t))
     ("^###\\( .*\\|$\\)" 1 'ess-jb-comment-face t)
     ("^###" "\\*.*?\\*" nil nil (0 'ess-jb-comment-bold-face append))
     ))
这样,行首带有
#####
的任何注释都将格式化为“标题1”。任何带有
#####
的注释都被格式化为“header 2”等格式,以
###
开头的行被视为带有特殊字体锁的注释(用于长注释)

这可以给出如下结果:

这是一个相当粗糙的方法,但是它的优点是它只使用标准的R注释,因此可以与其他人共享而没有问题。一般来说,我对“标题1”使用以下内容:其他人看到它如下,而我喜欢我定义的字体锁定:

############################################
#### HEADER 1
############################################
使用此语法,您还可以使用以下命令在前面定义的部分上激活
大纲次要模式
,并能够折叠/展开它们:

(add-hook 'ess-mode-hook
      '(lambda ()
         (auto-complete-mode nil)
         (outline-minor-mode 1)
         (setq outline-regexp "\\(^#\\{4,6\\}\\)\\|\\(^[a-zA-Z0-9_\.]+ ?<- ?function(.*{\\)")
         (setq outline-heading-alist
           '(("####" . 1) ("#####" . 2) ("######" . 3)
             ("^[a-zA-Z0-9_\.]+ ?<- ?function(.*{" .4)))))
(添加hook'ess模式hook
"(lambda)
(自动完成模式无)
(大纲小调模式1)

(setq outline regexp“\\(^ 4,6\\\)\\\\\\\\\\\\\\\(^[a-zA-Z0-9\.]+?听起来你有一个大的分析脚本。这不是很理想

考虑使用RMarkdown或swave重新创建它,并使用
knitr
运行它。然后,您可以使用emacs的工具导航markdown或TeX,并且可以使用
knitr
中的缓存系统,以避免在接近结束时更改某些内容时从一开始就必须进行分析

如果需要,还可以从分析中获得格式化的报告

此外,将内容拆分为单独的文件进行资源寻源有点不太理想-编写函数并将其放入包中要好得多-并且使用
devtools
包使其工作变得非常简单。只需编辑.R文件并
load\u all
更新它(过去没有复杂的包构建内容)

大获全胜。

最近(2013年2月)添加到Orgmode意味着您现在应该能够在源代码中嵌入组织标题,然后使用orgstruct模式浏览它们。因此,通过git升级您的组织模式,然后尝试打开下面的示例R文件。当您位于嵌入组织标题的注释行上时,只需点击TAB或shift TAB,您应该组织模式标题

### * Create data
data = list( s1=list(x=1:3, y=3:1), 
     s2=list(x=1:5, y=1:5), s3=list(x=1:4, y=rep(3,4)))

### * Base graphics version


par(mfrow=c(2,2))
lapply(data, plot)

### * Lattice version

nplots <- length(data)
pts.per.plot <- sapply(data, function(l) length(l$x))
df <- data.frame(which=rep(1:nplots, times=pts.per.plot),
                 x=unlist(sapply(data, function(l) l$x)),
                 y=unlist(sapply(data, function(l) l$y)))

xyplot(y~x|which, data=df, layout=c(2,2))

### ** Make the pdf
pdf(file='o.pdf')
xyplot(y~x|which, data=df, layout=c(2,1))                 
dev.off()

### * End of file

### Local Variables:
### eval: (orgstruct-mode 1)
### orgstruct-heading-prefix-regexp: "### "
### End:
创建数据 数据=列表(s1=列表(x=1:3,y=3:1), s2=列表(x=1:5,y=1:5),s3=列表(x=1:4,y=rep(3,4))) ###*基本图形版本 par(mfrow=c(2,2)) lappy(数据、绘图) ###*格子版
nplots提供R+降价、R+brew、R+cpp和其他功能。它仍处于开发的早期阶段,似乎只在最近的emacs(24.3)上可靠地工作。

另一个选项是allout模式,多年来我一直很满意。使用每个文件的局部变量:

## Local variables:
## allout-layout: (-1 : 0)
## End:

与上面提到的orgstruct模式类似,您也可以使用new,它与outline次要模式一起工作,将带有星号的注释解释为类似于组织模式的标题。它们可以使用简单的快捷方式(如TAB等)折叠/展开/添加/等。

使用Rmarkdown的一个问题是它不是(还没有)Emacs/ESS.Hm中真的支持-只是尝试了一下,但什么都没有发生?版本:组织模式版本7.9.3e(7.9.3e-1123-g33d362@/home/rkrug/.Emacs.d/Org-mode/lisp/)。我应该在组织邮件列表上询问吗?这对我来说很有用,而且非常方便,但是标题没有用特定的字体显示。你知道有没有这样做的选项吗?我没有看到orgstruct内置的任何东西可以执行额外的字体锁定,但是这里的另一个带有字体锁定的示例可以调整为突出显示t他说。哇,这太神奇了。有可能根据层次结构改变颜色吗?我花了一段时间才真正尝试你的建议。但我最近做了,字体锁定正在工作。但我使用了一个黑色主题(“zenburn”)对于emacs,字体锁定的标题现在有白色背景,这对眼睛来说有点难。从你的屏幕截图来看,似乎你已经解决了这个问题。我设法改变了隐藏背景的颜色,以颜色匹配我的主题。对于Emacc,现在字体锁定的头条标题现在有白色背景,现在是白色背景,这对眼睛来说有点难。从看你的屏幕截图来看,似乎你已经解决了这个问题。不知不知怎么了。我设法改变了隐藏背景背景背景背景背景的颜色,以颜色匹配颜色匹配我的颜色匹配我的主题匹配我的主题。现在,字体锁定的字体锁定的背景,现在,字体锁定的字体锁定的背景是白色背景,现在,现在,字体锁定的背景是白色背景,现在是白色背景,现在,这是白色背景,现在,这是白色背景,这是白色背景,这是白色背景,这对眼睛的眼睛的眼睛的眼睛有点困难。这对眼睛来说有点困难。这对眼睛来说有点困难。这是眼睛有点困难。这是眼睛有点##***,这样我就可以轻松地使用orgstruct模式。正则表达式有什么帮助吗?我尝试了以下方法:“(“^#####(*\)\([^#].*)$”(1'ess jb隐藏面t)(2'ess-jb-h1-face t))@stats hb可能类似于此(未测试):
“^#######(\*\)\ \([^*\)\)\([^*\)\)\”