14

統計分析を構築する方法を探しています。私は現在 Emacs/ESS を使用していますが、解析ファイルがかなり長くなりました。コードの一部を別のファイルのソース可能な関数に入れ始めましたが、それでも...

ファイルにある種の小見出し/セクション タイトル (集計、クラスター分析、シミュレーションなど) を導入し、その下にコードを記述して、作業したいセクションにすばやくジャンプできるようにしたいと思います。

コメントを使って検索するだけでもよかったと思いますが、その方法で概要や索引を取得することはできませんでした。見出しに Org-Mode を使用することも考えましたが、他の編集者と協力している共同編集者にとってはあまり便利ではありません。

R-Studio がこれをセクションで実装していることは知っているので、emacs 用のソリューションがあるのではないでしょうか?

どうもありがとうございました!

PS: imenu のようなものは機能しますが、それは関数用であり、セクション用ではありません

4

6 に答える 6

15

通常、私はorg-modeとorg-babelを使用しますが、スクリプトを他の人と共有する必要がある場合、次のようになります.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」としてフォーマットされます。が付いたコメントはすべて#####「ヘッダー2」などとしてフォーマットされます。また、で始まる行### は、特別なフォントロック(長いコメントに使用)が付いたコメントとして表示されます。

これはこのようなものを与えることができます:

ここに画像の説明を入力してください

これはかなりハッキーですが、標準のRコメントのみを使用するため、他のユーザーと問題なく共有できるという利点があります。一般的に、私は「ヘッダー1」に以下を使用します。定義されたフォントロックを楽しんでいる間、他の人はそれを以下のように見ます:

############################################
#### HEADER 1
############################################

この構文では、以下を使用して、outline-minor-mode 前に定義したセクションをアクティブにし、それらを折りたたんだり展開したりすることもできます。

(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)))))

このコードはすべて十分にテストされておらず、私はemacs lispの専門家からはほど遠いので、それを行うためのより良い方法があるはずです。バグがあっても驚かないでください。

于 2013-02-18T17:13:27.050 に答える
11

Orgmode への最近 (2013 年 2 月) の追加により、ソース コードに組織の見出しを埋め込み、orgstruct-mode を使用してそれらをナビゲートできるようになりました。そのため、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:
于 2013-02-19T10:27:18.403 に答える
8

1 つの大きな分析スクリプトがあるようですね。それはあまり最適ではありません...

RMarkdownやSweaveでやり直して、使っknitrて実行することを考えてみてください。次に、マークダウンまたは TeX をナビゲートするために emacs のツールを使用できます。また、キャッシング システムを使用してknitr、最後に何かを変更したときに最初から分析を行う必要をなくすことができます。

必要に応じて、分析から書式設定されたレポートも取得できます。

また、ソーシングのために個別のファイルに分割することは、少し最適ではありません。関数を記述してパッケージに入れる方がはるかに優れており、パッケージを使用devtoolsして操作を非常に簡単にします。.R ファイルを編集してload_all更新するだけです (過去の複雑なパッケージ ビルドはありません)。

大きな勝利。

于 2013-02-18T17:18:08.390 に答える
3

polymodeは R+markdown、R+brew、R+cpp などを提供します。まだ開発の初期段階にあり、ごく最近の emacs (24.3) でのみ確実に動作するようです。

于 2013-03-27T19:03:16.590 に答える
0

もう 1 つのオプションは、私が長年にわたって満足してきた allout-mode です。ファイルごとのローカル変数を使用する:

## Local variables:
## allout-layout: (-1 : 0)
## End:
于 2013-04-16T03:06:19.727 に答える