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
1.1k
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
650
rstanの環境構築 / Set Up rstan
y__mattu
1
1.1k
はじめての機械学習 / Entrance to Machine Learning
y__mattu
0
790
平均値と中央値の違いについて
y__mattu
1
910
dplyr 1.0.0の新機能 / dplyr 1.0.0
y__mattu
2
10k
Other Decks in Programming
See All in Programming
Apache Iceberg V3 and migration to V3
tomtanaka
0
160
0→1 フロントエンド開発 Tips🚀 #レバテックMeetup
bengo4com
0
570
コマンドとリード間の連携に対する脅威分析フレームワーク
pandayumi
1
450
そのAIレビュー、レビューしてますか? / Are you reviewing those AI reviews?
rkaga
6
4.6k
余白を設計しフロントエンド開発を 加速させる
tsukuha
7
2.1k
Patterns of Patterns
denyspoltorak
0
1.4k
例外処理とどう使い分ける?Result型を使ったエラー設計 #burikaigi
kajitack
16
6.1k
CSC307 Lecture 01
javiergs
PRO
0
690
CSC307 Lecture 05
javiergs
PRO
0
500
15年続くIoTサービスのSREエンジニアが挑む分散トレーシング導入
melonps
2
200
組織で育むオブザーバビリティ
ryota_hnk
0
180
AI & Enginnering
codelynx
0
110
Featured
See All Featured
WCS-LA-2024
lcolladotor
0
450
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
659
61k
State of Search Keynote: SEO is Dead Long Live SEO
ryanjones
0
120
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
52
5.8k
Embracing the Ebb and Flow
colly
88
5k
SEO Brein meetup: CTRL+C is not how to scale international SEO
lindahogenes
0
2.3k
Dominate Local Search Results - an insider guide to GBP, reviews, and Local SEO
greggifford
PRO
0
78
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
333
22k
Google's AI Overviews - The New Search
badams
0
910
How Software Deployment tools have changed in the past 20 years
geshan
0
32k
Thoughts on Productivity
jonyablonski
74
5k
Leadership Guide Workshop - DevTernity 2021
reverentgeek
1
200
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