WebAssembly によりブラウザ内で R が処理できる環境「WebR」の REPL で環境構築なしに処理【R言語】

この記事は、「[R言語 Advent Calendar 2024](https://qiita.com/advent-calendar/2024/rlang)」の 12日目の記事です。

## はじめに
今回の記事のメインの話は、以下の WebR の REPL環境についてです。

﻿https://webr.r-wasm.org/latest/

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/b84ae9b6-3b4f-90cf-4e31-6c9f3e02ef94.png)

### 情報源
今回扱う WebR関連の情報源は以下です。

●ブラウザで動くR、WebRが熱い！
　https://zenn.dev/eitsupi/articles/webr-is-2023

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/2ceb4c29-51ef-f07e-5ff5-4b63ea65a7bc.png)

どうやら WebAssembly を使って、ブラウザで R の処理を行えるようにしたもののようです。

とある環境で、諸事情により R がインストールできず（ポリシー的な要因で）、そしてクラウドサービスで R が使えるものも NG というところで処理したいデータがあったのですが、「これは活用できるかも！？」と思って試しました。

## サクッと試す
それでは、冒頭で掲載していた WebR の REPL環境を使って、R言語の処理をブラウザ上で行ってみます。

まずは R に関する記事を検索して、そこで出てくる処理自体はシンプルなものを試してみます。

試した内容と、参照した元情報は以下になります。

```R
score=c(57, 67, 23, 50, 52, 51, 48, 49, 54, 44, 31, 53, 40, 60)
shapiro.test(score)
```

●R統計検定1（2群の平均値の差の検定） - Qiita
　https://qiita.com/sakutoy/items/58fb952b99f0abd9a250

ちなみに上記の内容は、「データが正規分布に従うかどうか」を確かめられる「シャピロ・ウィルク検定」です。

### 処理結果
それでは、WebR の REPL の環境で、左上の部分にコードを貼り付けて、そして実行用のボタンを押してみます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/c04e3606-2f3d-1570-ea82-ef9f02e005b1.png)

実行結果は以下のとおりで、検定統計量を示す W と p値のそれぞれが計算されることが確かめられました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/ac3c7e0c-07f3-cc49-b0b4-f94d37f8a794.png)

出力された値は、元記事で R で算出していたものと同じでした。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/9f74dbeb-a738-97b8-385c-ca8255d63026.png)

## さらなるお試し
さらに、R で使いそうな処理を試してみます。

次は、以下にあるものから １つ選んでみました。

●統計検定のまとめブログ
 https://data-science.gr.jp/

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/e47f9be7-da59-19f3-b86f-5d73bd90278b.png)

[RによるF検定](https://data-science.gr.jp/implementation/ist_r_f_test.html)を選んでみました。

### 処理結果
実際に実行してみた結果は以下のとおりです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/e23d406d-659b-777a-121d-bd3a778543ae.png)

こちらも、元記事が R を使って求めた結果と一致しています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/b6a317fa-5314-df69-e1af-d5bc211966df.png)

## おわりに
とりあえずのお試しでしたが、2つの検定をブラウザ上で実行できることが確認できました。

この他に CSVファイルを用意して処理をするとか、もっと複雑なものを試してみたりなど、お試しをできればと思います。

### その他の関連メモ
今回使った WebR は、ライブラリとして読み込んで、自前の JavaScript の処理と組み合わせることもできそうです。

それに関連しそうな内容を、ざっくりと掲載してみます。

#### JavaScript の処理との組み合わせ

●How to run R code in the browser with webR – Notes from a data witch
 https://blog.djnavarro.net/posts/2023-04-09_webr/

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/c508c0a7-3c52-7ebe-4f00-9625dc1e0504.png)

#### CDN やダウンロードパッケージ

●webr CDN by jsDelivr - A CDN for npm and GitHub
 https://www.jsdelivr.com/package/npm/webr

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/663f9842-d1da-667f-c402-af9daa31667b.png)

●Downloading WebR – WebR - R in the Browser
 https://docs.r-wasm.org/webr/latest/downloading.html

●Downloading WebR ? WebR - R in the Browser
　https://docs.r-wasm.org/webr/latest/downloading.html

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/6b07c424-ce6b-b3e3-6f01-746627f30526.png)