Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
R言語とGo言語 / R and Go
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
松村優哉
July 03, 2021
Programming
1.1k
2
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
R言語とGo言語 / R and Go
松村優哉
July 03, 2021
More Decks by 松村優哉
See All by 松村優哉
はじめての機械学習 / entrance-to-machine-learning2022
y__mattu
2
1.2k
validateパッケージでデータを検証する / Data Validation with validate package
y__mattu
0
710
rstanの環境構築 / Set Up rstan
y__mattu
1
1.2k
はじめての機械学習 / Entrance to Machine Learning
y__mattu
0
840
平均値と中央値の違いについて
y__mattu
1
1k
dplyr 1.0.0の新機能 / dplyr 1.0.0
y__mattu
2
10k
Other Decks in Programming
See All in Programming
Unity6 URPによる海底をテーマにしたVJシステムの解説 | Unity Shader 完全に理解した 勉強会
gam0022
0
380
Jetpack Compose Mechanisms
skydoves
3
870
作れる、でも消せるか?──安全に「枯らして消す」機能削除術 / Drain, Then Delete
chobishiba
2
1k
Optunaを作ったときにやりたかったこと、その後 (2026/10/16, Optuna Meetup #3)
iwiwi
4
1.3k
Kotlinize Is Not Just Converting to Kotlin
chigichan24
1
190
AI-Powered Domain-Driven Design
ziobrando
0
320
Augmenting AI with the Power of Jakarta EE
ivargrimstad
0
430
When benchmarks go bad - what I learned from measuring performance wrong
hollycummins
0
240
Apple Intelligenceとオンデバイス時代の到来
yahir0
0
140
Long Living Tokens, Die, Die, Die! (or: The One Ring is Banned in Modern)
sylph01
0
370
Seven New Principles of Software Engineering
yegor256
0
330
PumaからFalconに移行したRailsアプリケーションでの実践
falcon8823
0
250
Featured
See All Featured
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
27k
Information Architects: The Missing Link in Design Systems
soysaucechin
1
1.2k
Deep Space Network (abreviated)
tonyrice
0
380
svc-hook: hooking system calls on ARM64 by binary rewriting
retrage
2
640
Faster Mobile Websites
deanohume
310
32k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
123
22k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
666
130k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
232
55k
Site-Speed That Sticks
csswizardry
13
1.6k
Building Adaptive Systems
keathley
44
3.3k
Are puppies a ranking factor?
jonoalderson
2
4.1k
How Software Deployment tools have changed in the past 20 years
geshan
2
35k
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