Skip to content

Commit

Permalink
Merge pull request #6 from mokztk/devel/4.0.3
Browse files Browse the repository at this point in the history
[Devel/4.0.3] 4.0.3_update2104
  • Loading branch information
mokztk committed Apr 13, 2021
2 parents c268886 + cdf6960 commit 35105fd
Show file tree
Hide file tree
Showing 5 changed files with 357 additions and 31 deletions.
3 changes: 3 additions & 0 deletions Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,9 @@ RUN /my_scripts/install_tex_packages.sh
# ${R_HOME}/etc/Renviron のタイムゾーン指定(Etc/UTC)を上書き
RUN echo "TZ=Asia/Tokyo" >> /home/rstudio/.Renviron

# 検証用ファイル
COPY --chown=rstudio:rstudio utils /home/rstudio/utils

USER root
ENV LANG=ja_JP.UTF-8 \
LC_ALL=ja_JP.UTF-8 \
Expand Down
36 changes: 19 additions & 17 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,16 +5,6 @@
- `reticulate` で最低限の python 連携も使用できるようにする
- [rocker-org/rocker-versioned2](https://github.com/rocker-org/rocker-versioned2) のように、目的別のスクリプトを使って Dockerfile 自体は極力シンプルにしてみる

## History

- **2020-11-02** [Gist: mokztk/R4.0_2020Oct.Docerfile](https://gist.github.com/mokztk/be9e0d8982fd32987dbb5c9552a9d4a7) から改めてレポジトリとして編集を開始
- **2020-11-02** 🔖[4.0.2_2020Oct](https://github.com/mokztk/RStudio_docker/releases/tag/4.0.2_2020Oct) : `rocker/tidyverse:4.0.2` 対応版
- **2021-01-14** 🔖[4.0.2_update2101](https://github.com/mokztk/RStudio_docker/releases/tag/4.0.2_update2101) : 4.0.2_2020Oct の修正版
- **2021-03-06** 🔖[4.0.2_2021Jan](https://github.com/mokztk/RStudio_docker/releases/tag/4.0.2_2021Jan) : `rocker/tidyverse:4.0.2` ベースのままパッケージを更新
- **2021-03-11** 🔖[4.0.3_2020Feb](https://github.com/mokztk/RStudio_docker/releases/tag/4.0.3_2021Feb) : `rocker/tidyverse:4.0.3` にあわせて更新
- **2021-04-01** ブランチ構成を再編(GitHub flow モドキ)
- **2021-04-04** 🔖[4.0.3_TL2020](https://github.com/mokztk/RStudio_docker/releases/tag/4.0.3_TL2020) : TeX を TeX Live 2020 (frozen) に固定

## 詳細

### Ubuntu mirror
Expand All @@ -30,28 +20,28 @@
- <s>IPAex明朝/ゴシック(Ubuntu の `fonts-ipaexfont` パッケージ)</s>
- Noto Sans/Serif JP([Google Fonts](https://fonts.google.com/) で配布されている日本語サブセット版)
- Noto Sans/Serif CJK JP
- Ubuntu の `fonts-noto-cjk` パッケージのみでは XeLaTeX + BXjscls で日本語PDFを作成するのに不足
- 自分の用途では、KR, SC, TC のフォントは不要
- 容量節約で `fonts-noto-cjk-extra` は使わず[Google Noto Fonts](https://www.google.com/get/noto/) からOTF版をダウンロードして必要なものを手動でインストール
- Ubuntu の `fonts-noto-cjk` パッケージのみでは XeLaTeX + BXjscls で日本語PDFを作成するのに不足あり
- `fonts-noto-cjk-extra`KR, SC, TC のフォントを含むので巨大
- 容量節約のため[Google Noto Fonts](https://www.google.com/get/noto/) からOTF版をダウンロードして JP の必要なウェイトを手動でインストールする

### radian: A 21 century R console

- https://github.com/randy3k/radian
- インストールには、Python 3用の pip が必要
- コード補完のためには `jedi` が必要だが、radian 0.51 時点では jedi 0.18 以降には対応していないので 0.17.2 を指定
- コード補完のためには `jedi` が必要だが、radian 0.51 時点では jedi 0.18 以降には対応していないので 0.17.2 を指定する

### Python

- radian で使うために python をセットアップするなら、R と連携できるようにする
- radian で使うために python をセットアップするので、R とも連携できるようにする
- そのままでは、Python共有ライブラリや Pandas がないので `reticulate` は動かない
- rocker project で用意されている `/rocker_scripts/install_python.sh` を利用
- rocker project で用意されている `/rocker_scripts/install_python.sh` を利用する
- `Pandas``Seaborn` (`matplotlib`) をシステム側に入れておく

### TinyTeX

- XeLaTeX + BXjscls で日本語PDFを作成するのに必要なパッケージも予めインストールしてしまう
- 2021年3月末で TeX Live 2020 が更新終了(frozen)となったので、日本語 TeX 開発コミュニティ texjp.org のサーバにあるTeX Live 2020 のアーカイブを利用するようにする
- TinyTeX はそれに合わせて "2021.03" をインストール
- TinyTeX はそれに合わせて "2021.03" をインストールする

### R の頻用パッケージ

Expand All @@ -64,3 +54,15 @@

- Docker Desktop など `-e PASSWORD=...` が設定できないGUIでも起動テストできるように仮のパスワードを埋め込んでおく
- 更に、普段使いのため `DISABLE_AUTH=true` を埋め込む。パスワードが必要なときは、起動時に `-e DISABLE_AUTH=false`

## History

- **2020-11-02** [Gist: mokztk/R4.0_2020Oct.Docerfile](https://gist.github.com/mokztk/be9e0d8982fd32987dbb5c9552a9d4a7) から改めてレポジトリとして編集を開始
- **2020-11-02** 🔖[4.0.2_2020Oct](https://github.com/mokztk/RStudio_docker/releases/tag/4.0.2_2020Oct) : `rocker/tidyverse:4.0.2` 対応版
- **2021-01-14** 🔖[4.0.2_update2101](https://github.com/mokztk/RStudio_docker/releases/tag/4.0.2_update2101) : 4.0.2_2020Oct の修正版
- **2021-03-06** 🔖[4.0.2_2021Jan](https://github.com/mokztk/RStudio_docker/releases/tag/4.0.2_2021Jan) : `rocker/tidyverse:4.0.2` ベースのままパッケージを更新
- **2021-03-11** 🔖[4.0.3_2020Feb](https://github.com/mokztk/RStudio_docker/releases/tag/4.0.3_2021Feb) : `rocker/tidyverse:4.0.3` にあわせて更新
- **2021-04-01** ブランチ構成を再編(GitHub flow モドキ)
- **2021-04-04** 🔖[4.0.3_TL2020](https://github.com/mokztk/RStudio_docker/releases/tag/4.0.3_TL2020) : TeX を TeX Live 2020 (frozen) に固定
- **2021-04-13** 🔖[4.0.3_update2104](https://github.com/mokztk/RStudio_docker/releases/tag/4.0.3_update2104) : 4.0.3_TL2020 の修正版

13 changes: 11 additions & 2 deletions my_scripts/install_r_packages.sh
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,11 @@ apt-get install -y --no-install-recommends \
libtbb2 \
default-jre \
libudunits2-0 \
libtcl8.6
libtcl8.6 \
libtk8.6 \
libglpk40 \
libproj15 \
libgdal26

apt-get clean
rm -rf /var/lib/apt/lists/*
Expand Down Expand Up @@ -56,7 +60,12 @@ install2.r --error --deps TRUE --ncpus -1 --skipinstalled \
gt \
gtsummary \
minidown \
palmerpenguins
palmerpenguins \
styler

# R.cache (imported by styler) で使用するキャッシュディレクトリを準備
mkdir -p /home/rstudio/.cache/R/R.cache
chown -R rstudio:rstudio /home/rstudio/.cache

# since package "export" was removed from CRAN on 2020-02-21,
# install dev version from GitHub repo (commit c63141e / 2020-09-09)
Expand Down
283 changes: 283 additions & 0 deletions utils/Image_test.Rmd
Original file line number Diff line number Diff line change
@@ -0,0 +1,283 @@
---
title: "RStudioイメージ検証"
date: "`r Sys.Date()`"
output:
html_document:
toc: true
toc_depth: 3
toc_float: true
df_print: kable
---

```{r setup, include = FALSE}
library(tidyverse)
# レポート全体の共通設定
knitr::opts_chunk$set(
comment = NA,
tidy = TRUE,
echo = FALSE,
warning = FALSE,
message = FALSE
)
```

```{css, echo = FALSE}
/* タイトル部分 */
div#header {
border: solid thin #444;
padding-left: 1em;
margin-bottom: 1em;
}
/* 見出しレベル2 (##) */
h2 {
border-bottom: solid 3px #ccc;
}
div.level2 {
margin-top: 1em;
}
/* 表を縞にする */
tr:nth-child(even) {
background-color: #eee;
}
tr:nth-child(odd) {
background-color: white;
}
/* 印刷用の設定 */
@media print {
/* 印刷時の表の改ページ関係 */
thead {
display: table-header-group;
}
/* 印刷時にリンクの後ろにURLを付けない */
a[href]:after {
content: "";
}
/* 印刷時に [Code] ボタンを消す */
button.code-folding-btn {
display: none;
}
/* 目次は印刷しない */
#TOC {
display: none;
}
}
```

## Memo

<form>
<textarea class="form-control" rows="5">
【検証者】
【Host OS】
【Docker version】
【備考】
</textarea>
</form>


## Platform Info

```{r platform}
sessioninfo::platform_info() %>%
imap_dfr(~ c(setting = .y, value = .x))
```

**Default font :** `r system("fc-match", intern = TRUE)`

\newpage

## Package Info

```{r chk_package_load, cache = TRUE}
# 開始時に読み込まれているパッケージのリスト
base_list <- search()
# パッケージのロードを試みて結果を返す関数
fun_chk_package_load <- function(pkg) {
temp <- tryCatch(
# 極力メッセージが表示されないようにパッケージを読み込む
suppressMessages(
library(pkg, character.only = TRUE, quietly = TRUE)
),
# Warning, Error の場合はその内容を返す。改行はスペースに置換
warning = function(w) {
return(c("Warning", gsub("\n", " ", w$message)))
},
error = function(e) {
return(c("Error", gsub("\n", " ", e$message)))
}
)
# 初期状態と比較して、新しくロードされたものを detach() する
sapply(setdiff(search(), base_list),
function(p) detach(pos = match(p, search())))
# パッケージのロード成功の場合は "ok"、失敗時はエラーメッセージを返す
if (pkg %in% temp) {
return(c(result = "ok", message = "-"))
} else {
return(c(result = temp[1], message = temp[2]))
}
}
# インストールされている全パッケージについてテスト
res_df <- .packages(all.available = TRUE) %>%
sessioninfo::package_info(pkgs = ., include_base = TRUE) %>%
as_tibble() %>%
select(package, ondiskversion, date, source) %>%
mutate(
chk_loading = map(package, ~ do.call(what = fun_chk_package_load, args = list(pkg = .))),
result = map_chr(chk_loading, ~ .[1]),
result = fct_relevel(result, c("Error", "Warning", "ok")),
message = map_chr(chk_loading, ~ .[2])
) %>%
select(-chk_loading)
```

```{r save_csv, eval = FALSE, include = FALSE}
# 保存
res_df %>%
# 並べ替え
arrange(result, package) %>%
# 文字化け対策
mutate(
message = str_replace_all(message, "(‘|’)", "'")
) %>%
# 出力
write.csv(
file = "~/library_test.csv",
quote = TRUE, fileEncoding = "cp932"
)
```

### 読み込み時 Error (`r sum(res_df$result == "Error")`)

```{r pkg_w_error}
res_df %>%
filter(result == "Error") %>%
select(package, message) %>%
knitr::kable(format = "simple")
# knitr::kable(col.names = c("package_name", ""))
```

### 読み込み時 Warning (`r sum(res_df$result == "Warning")`)

```{r pkg_w_warn}
res_df %>%
filter(result == "Warning") %>%
select(package, message) %>%
knitr::kable(format = "simple")
# knitr::kable(col.names = c("package_name", ""))
```

### インストール済すべて (`r nrow(res_df)`)

```{r pkg_version}
res_df %>%
select(package, ondiskversion, date, source) %>%
knitr::kable(format = "simple")
```

\newpage

## TinyTeX

```{r tinytex, results = "asis"}
if ("tinytex" %in% .packages(all.available = TRUE)) {
tryCatch(
{
tinytex::tlmgr("version", stdout = TRUE) %>%
paste(collapse = "\n") %>%
paste(tinytex::tlmgr_repo(stdout = TRUE), sep = "\n\n") %>%
paste("", "```", ., "```", sep = "\n") %>%
append("**{tinytex} パッケージのインストールが完了しています。**<br>", .) %>%
cat()
},
warning = function(w) {
cat("**{tinytex} パッケージはありますが、インストールが完了していません。**")
# return(gsub('\\n', '', w$message))
}
)
} else {
cat("**{tinytex} パッケージがありません。**")
}
```

### インストール済のTeXパッケージ
```{r tinytex_packages}
if ("tinytex" %in% .packages(all.available = TRUE)) {
tryCatch(
{
tinytex::tlmgr("list --only-installed", stdout = TRUE) %>%
tibble(plist = .) %>%
mutate(
package = map_chr(plist, ~ gsub("^i\ ([^:]+):.*", "\\1", .)),
description = map_chr(plist, ~ gsub("^i\ .+:\ (.+)", "\\1", .))
) %>%
select(-plist) %>%
knitr::kable(format = "simple")
},
warning = function(w) {
return(gsub("\\n", "", w$message))
}
)
}
```

\newpage

## Python & {reticulate}

```{r chk_reticulate, results = "asis"}
if ("reticulate" %in% .packages(all.available = TRUE)) {
cat("**{reticulate} がインストールされています。**\n")
reticulate::py_config() %>%
capture.output() %>%
paste(collapse = "\n") %>%
paste("```", ., "```", sep = "\n") %>%
cat()
} else {
cat("**{reticulate} がインストールされていません。**")
cat("<br><br>システムのpythonは<br>")
tryCatch(
{
system("python --version && which python", intern = TRUE) %>%
paste(collapse = "\n") %>%
paste("", "```", ., "```", sep = "\n") %>%
cat()
},
warning = function(w) {
paste("", "```", w$message, "```", sep = "\n") %>% cat()
},
error = function(e) {
paste("", "```", e$message, "```", sep = "\n") %>% cat()
})
}
```

### pip list --freeze

```{r chk_pip_pkgs, results = "asis"}
tryCatch(
{
system("python -m pip list -freeze", intern = TRUE) %>%
paste(collapse = "\n") %>%
cat()
},
warning = function(w) {
w$message
},
error = function(e) {
e$message
})
```
Loading

0 comments on commit 35105fd

Please sign in to comment.