ユーザ用ツール

サイト用ツール


メモ:rmarkdown

差分

このページの2つのバージョン間の差分を表示します。

この比較画面へのリンク

両方とも前のリビジョン前のリビジョン
次のリビジョン
前のリビジョン
次のリビジョン両方とも次のリビジョン
メモ:rmarkdown [2020/05/12 10:56] – [Loopでチャンク作成] adminメモ:rmarkdown [2020/07/16 17:25] – [回帰分析の結果出力] Wiki Editor
行 186: 行 186:
 このように、改行「\n」が入った文字列やベクトルをlinebreakに渡してやるとよい。 このように、改行「\n」が入った文字列やベクトルをlinebreakに渡してやるとよい。
  
 +===== 回帰分析の結果出力 =====
 +
 +回帰分析の結果の出力は、texregパッケージを使うと手間なく美しくできる。類似パッケージもあるが、とりあえずこのパッケージを使っている。
 +
 +ここでは主にPDFに出力するために使っているので、要するにLatexのコードを出力するために利用している。
 +
 +単純に回帰分析の結果を出力するだけなら以下。
 +  # lm()の結果がres.lmに代入されているとして
 +  texreg(
 +    list(res.lm),
 +    digits = 3,
 +    caption = "回帰分析の結果",
 +    float.pos = "h"
 +  )
 +
 +関数の第一引数に回帰分析の結果が入ったオブジェクトをリストで渡してやればよい。複数の結果を与えると、自動的に横に並べて表示してくれる。2つのモデルの結果で同じ変数があれば、同じ行に示してくれる。モデル内の変数が異なる行は、存在しない場合は空白になって表示される。その他によく使うのは、小数点以下の桁数、キャプション、Latex側でfloatで表を挿入する際のオプション指定など。これ以外にも、モデル名を設定(custom.model.names)や変数名を設定(custom.coef.names)、変数の順序(reorder.coef)、表示しない変数(omit.coef:正規表現で除外変数を指定)など細かく指定できる。
 +
 +なお、開発中は「texreg」の部分を「screenreg」にしておくと、インラインで見やすいように出力してくれる。
 +
 +ロジスティック回帰を行ったときなど、結果の係数を指数変換してオッズ比にしたい場合などがある。その場合は、次のように係数をいったん取り出して、オーバーライドしてやればよい。
 +
 +  # res.glmにglm()の結果が代入されているとして
 +  
 +  # texregパッケージのextract関数で各種係数を取り出す
 +  # ロードしていてもパッケージ名を指定しないと同名の関数が被ることがよくある
 +  res.glm.ext <- texreg::extract(res.glm)
 +  
 +  texreg(
 +    list(res.glm),
 +    # 上のリストで与えたモデルと同じ順で上書きする係数の入ったオブジェクトをリストで渡す
 +    #  ここでは先にextractで取り出した係数を指数変換してオッズ比にしている
 +    override.coef = list(exp(res.glm.ext@coef)),
 +    override.se = list(exp(res.glm.ext@se)),
 +    digits = 3,
 +    caption = "ロジスティック回帰の結果",
 +    float.pos = "h"
 +  )
 +
 +===== 図のテキスト回り込み =====
 +
 +例によってRmarkdownからPDFを出力する際の細かい設定は、RmarkdownからLatexを制御しなければならないため、やや複雑になる。他に利用しているパッケージによってはうまく動かないなど、実用レベルではない気もする。とりあえず現状のメモ。
 +
 +  * [[https://stackoverflow.com/questions/54100806/r-markdown-how-do-i-make-text-float-around-figures]]
 +
 +まず、Latexでwrapfigを読み込む。
 +
 +  header-includes:
 +    - \usepackage{wrapfig}
 +
 +ただし、titlesecパッケージを読み込むとうまく動かない。
 +
 +  - \usepackage[compact]{titlesec}
 +
 +
 +bxjsarticleのクラスオプションにeveryparhook=compatを指定しないとうまく動かない。
 +
 +  documentclass: bxjsarticle
 +  classoption: xelatex,ja=standard,everyparhook=compat
 +
 +
 +次に、Rmarkdownで図を出力する際にLatex側に指定する環境を書き換える(たぶん)
 +
 +  ```{r, include = F}
 +  defOut <- knitr::knit_hooks$get("plot" # save the default plot hook 
 +  knitr::knit_hooks$set(plot = function(x, options) {  # set new plot hook ...
 +    x <- defOut(x, options)  # first apply the default hook
 +    if(!is.null(options$wrapfigure)) {  # then, if option wrapfigure is given ...
 +      # create the new opening string for the wrapfigure environment ...
 +      wf <- sprintf("\\begin{wrapfigure}{%s}{%g\\textwidth}", options$wrapfigure[[1]], options$wrapfigure[[2]])
 +      x  <- gsub("\\begin{figure}", wf, x, fixed = T)  # and replace the default one with it.
 +      x  <- gsub("{figure}", "{wrapfigure}", x, fixed = T)  # also replace the environment ending
 +    }
 +    return(x)
 +  })
 +  ```
 +
 + 図を出力するチャンクでwrapfigureオプションを指定する。ここでは図を右寄せで行幅の70%の大きさに指定している。
 +
 +  ```{r echo = F, warning = F, message = F, fig.width=7, fig.height = 6, out.width = ".7\\textwidth", fig.cap = "My Flowchart", fig.align="right", wrapfigure = list("R", .7)}
 +  plot(mpg ~ hp, data = mtcars)
 +  ```
 +
 +ということで、何とか回り込みを設定できるものの、いろいろと問題が多い。素直にRmarkdownから指定できるようになってほしい。
  
メモ/rmarkdown.txt · 最終更新: 2023/06/22 11:00 by Wiki Editor

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki