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
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
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
680
rstanの環境構築 / Set Up rstan
y__mattu
1
1.2k
はじめての機械学習 / Entrance to Machine Learning
y__mattu
0
820
平均値と中央値の違いについて
y__mattu
1
950
dplyr 1.0.0の新機能 / dplyr 1.0.0
y__mattu
2
10k
Other Decks in Programming
See All in Programming
Inspired By RubyKaigi (EN)
atzzcokek
0
460
軽量Java基盤の設計 DIコンテナに頼らない、長期保守と1秒起動の実現 JJUG CCC 2026 Spring
macha64
0
240
GitHub Copilot CLIのいいところ
htkym
2
1.2k
Augmenting AI with the Power of Jakarta EE
ivargrimstad
0
420
inferと仲良くなる10分間
ryokatsuse
1
290
TypeSpec で繋ぐ複数プロダクトの型安全
maroon8021
1
270
Lessons from Spec-Driven Development
simas
PRO
0
110
Signal Forms: Beyond the Basics @ngBaguette 2026 in Paris
manfredsteyer
PRO
0
180
RailsTokyo 2026#4: AI様があれば、 Hotwireの弱点は消えるか?
naofumi
5
1k
生成AI時代にこそ効くGo | Why Go Works in the Age of Generative AI
mom0tomo
8
3k
脅威をエンジニアリングの糧にして――現場編 / Turning Threats into Engineering Fuel — Field Edition
nrslib
0
220
TSKaigi 2026 TypeScriptバックエンドのオブザーバビリティ戦略 — Datadog × NestJSの実践
taiseiyamamotoan
1
210
Featured
See All Featured
Dominate Local Search Results - an insider guide to GBP, reviews, and Local SEO
greggifford
PRO
0
180
The Limits of Empathy - UXLibs8
cassininazir
1
340
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
35
2.5k
Ecommerce SEO: The Keys for Success Now & Beyond - #SERPConf2024
aleyda
1
2k
Designing for Performance
lara
611
70k
Beyond borders and beyond the search box: How to win the global "messy middle" with AI-driven SEO
davidcarrasco
3
150
Have SEOs Ruined the Internet? - User Awareness of SEO in 2025
akashhashmi
0
350
The #1 spot is gone: here's how to win anyway
tamaranovitovic
2
1.1k
Design of three-dimensional binary manipulators for pick-and-place task avoiding obstacles (IECON2024)
konakalab
0
440
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
34
2.8k
Building Experiences: Design Systems, User Experience, and Full Site Editing
marktimemedia
0
520
Code Reviewing Like a Champion
maltzj
528
40k
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