Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
R言語とGo言語 / R and Go
Search
松村優哉
July 03, 2021
Programming
1
940
R言語とGo言語 / R and Go
松村優哉
July 03, 2021
Tweet
Share
More Decks by 松村優哉
See All by 松村優哉
はじめての機械学習 / entrance-to-machine-learning2022
y__mattu
2
1.1k
validateパッケージでデータを検証する / Data Validation with validate package
y__mattu
0
550
rstanの環境構築 / Set Up rstan
y__mattu
1
1.1k
はじめての機械学習 / Entrance to Machine Learning
y__mattu
0
720
平均値と中央値の違いについて
y__mattu
1
850
dplyr 1.0.0の新機能 / dplyr 1.0.0
y__mattu
2
9.9k
Other Decks in Programming
See All in Programming
コンテナでLambdaをデプロイするときに知っておきたかったこと
_takahash
0
140
イベントソーシングによってインピーダンスミスマッチから解放された話
tkawae
1
330
OpenTelemetryを活用したObservability入門 / Introduction to Observability with OpenTelemetry
seike460
PRO
0
280
ローコードサービスの進化のためのモノレポ移行
taro28
1
330
Scala 3 で GLSL のための c-like-for を実装してみた
exoego
1
180
보일러플레이트 코드가 진짜 나쁜 건가요?
gaeun5744
0
370
私の愛したLaravel 〜レールを超えたその先へ〜
kentaroutakeda
12
3.5k
Node.js, Deno, Bun 最新動向とその所感について
yosuke_furukawa
PRO
6
3k
リアクティブシステムの変遷から理解するalien-signals / Learning alien-signals from the evolution of reactive systems
yamanoku
2
960
JavaOne 2025: Advancing Java Profiling
jbachorik
1
310
AI時代のプログラミング教育 / programming education in ai era
kishida
22
20k
Return of the Full-Stack Developer
simas
PRO
1
310
Featured
See All Featured
Making Projects Easy
brettharned
116
6.1k
How to Think Like a Performance Engineer
csswizardry
22
1.5k
Adopting Sorbet at Scale
ufuk
75
9.3k
What’s in a name? Adding method to the madness
productmarketing
PRO
22
3.4k
Gamification - CAS2011
davidbonilla
81
5.2k
Why You Should Never Use an ORM
jnunemaker
PRO
55
9.3k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
46
2.4k
Building Applications with DynamoDB
mza
94
6.3k
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
4
470
Build your cross-platform service in a week with App Engine
jlugia
229
18k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
22
2.6k
Scaling GitHub
holman
459
140k
Transcript
R⾔語と Go⾔語 @y__mattu 2021-07-03 Tokyo.R #93 応⽤セッション
誰︖ • 松村優哉 • 出⾝: 計量経済、ベイズ統計、 因果推論 • お仕事: データサイエンティストと
データエンジニア in HR Tech企業 • ⾔語: R, Python, Go←New! • Tokyo.R運営(初⼼者セッションとか) • 近況: useR! 2021のお⼿伝い (7/5-9)
宣伝 Rユーザのための RStudio[実践]⼊⾨ 第2版 好評発売中!!
宣伝2 WEB+DB PRESS vol.123 好評発売中!! Nob Data(株)の⼤城さんとの インタビューが掲載されました
今⽇のお話 • Go⾔語とは • 私とGo⾔語 • RでGoの関数を呼び出す⽅法 • ⼩話
今⽇話さないこと • Go⾔語の何が素晴らしいか • Go⾔語の⽂法 • Rパッケージ内にGo⾔語の関数を組み込む⽅法 • Go⾔語からRを呼ぶ⽅法
Go⾔語とは • Google が開発したプログラミング⾔語 • 「Go⾔語」や「Golang」と表記される • コンパイル型の⾔語 • 並列処理に強いと⾔われている
• ⼀節では「進化したC⾔語」 • 環境依存が少ない • Gopherくんかわいい
私とGo⾔語 • お仕事: データエンジニアリングで「使えたら幅が広がりそう」と 思う場⾯があった • 趣味: とあるC++製のライブラリを使ってみようと思ったらMacだ とビルドでコケる •
C++ライブラリならRから呼べる • Linuxの特定の環境下でしか動かなかった →もう少しいろんな環境で動く⾔語に移植しよう • 昔々、こんな記事を書いたことも
はじめてのGo⾔語 • インストール • 公式Webページから • Go⾔語のざっくり実⾏⼿順 • .goファイルにプログラムを書く •
go build コマンドでバイナリを作成 • バイナリを直接コンソールに⼊⼒
Hello Worldしてみる • hellowrold.go デモ mainパッケージであることの宣⾔ (Go特有の書き⽅なのでここでは気にしなくて良い) パッケージの読み込み 関数の定義
これをRから呼びたい • RからGoを呼ぶ⽅法 1. Goのコードを書く 2. Goの関数を呼び出すコードをC⾔語で書く 3. そのCの関数をRで呼び出す •
Rustはextendrという便利なものがあるので楽そう︖ですが、Goは 今の所愚直にやるしかなさそうです。 • C++を避けるのがスタートだったのになぜか結局Cを書いているというツッコミはなしで。 • Goの関数を呼ぶだけならぶっちゃけそんなに難しくないし…
やってみよう • 数値で試してみる(./calc/main.go) Cパッケージをインポート (Cから呼び出すのに必要) 数値に2を×関数 フィボナッチ数列を計算する関数 (ただしこの書き⽅だと遅い) コメントアウトで //export
関数名 を書く ファイル名がmain.goなら、お約束的に書く
この時点でのファイル構成 ・ calc main.go
ビルドして、共有オブジェクトを作る C⾔語で扱う「共有オブジェクト」と呼ばれるファイル。 UNIX系OS(macOSやLinux)ではso、 Windowsではdll拡張⼦を使う
この時点でのファイル構成 ・ calc main.go libcalc.h libcalc.so
C⾔語で、Go⾔語の関数を呼ぶ関数を書く • 数値で試してみる(./rgo.c) Rから呼ぶのに必要な ヘッダーファイルの読み込み 外部から呼び出す関数を宣⾔ 関数の定義 関数⾃体はGoで書いているので、 Rから⼊ってくる⼊⼒とRへの出⼒だけ 整合性が取れるように書けばOK
この時点でのファイル構成 ・ calc main.go libcalc.h libcalc.so rgo.c
Cプログラムをコンパイルする このとき、 UNIX系OSではgccが、 WindowsではRtoolsが必要
この時点でのファイル構成 ・ calc main.go libcalc.h libcalc.so rgo.c rgo.o rgo.so Rから呼ぶのに必要なのはこれ
いよいよRから実⾏︕︕︕
まとめ • RからGoの関数を呼ぶことができた • 結局Cを書いてコンパイルしたけど気にしない • 逆に⾔えば、C系の⾔語に慣れている⼈ならすぐにやれそう • ただしGo⾔語の壁… •
Rcppから呼べると楽しそう(Go製のプログラムをRcppで呼ぶ前例はある) • Goの強みを活かすような解析(並列実⾏とか︖)や、プロダクショ ンレベルでRを使いたいといったニーズに応えられる…かも • これからいろいろ開発がんばります • フィードバックお待ちしています︕
⼩話1 • RとGo⾔語の関係 • 普通にRを使っているとGoを意識することは基本ないけど、裏側で は実は結構使われていたりする 例: • RStudioサーバーのバックエンドはGo実装 •
Dockerはそれ⾃体Go製のプログラム
⼩話2 • 実はR×Goの話は、プロジェクトとして進みそうな雰囲気があった 時期もある • RStudio社のRomain Francois • dplyrなどtidyverse系の多くの パッケージのコミッター
• ただし、2018年以降は特に進展が ないっぽい https://speakerdeck.com/romainfrancois/arrow-plus-ergo-1?slide=8