SlideShare ist ein Scribd-Unternehmen logo
1 von 23
Downloaden Sie, um offline zu lesen
R.3.0.0 is released!!
2013年4月20日
第30回Tokyo.R
@sfchaos
2
というわけで,
2013年4月3日
3
R-3.0.0
リリース!
The R Project for Statistical Computing
4
いろめき立つ
R界隈
R-statistics blog
SOURCEFORGE.JP Magazine
5
何が変わったか?
6
@kohskeさんのページに
まとまっている
R.3.0.0の大事な変更点
7
大きな変更点
Long Vectorの導入
8
Long Vectorとは
長いベクトルのこと
9
> x <- rep(0, 2^31-1)
> x <- rep(0, 2^31)
エラー: サイズ 8.0 Gb のベクトルを割り当てることができません
追加情報: 警告メッセージ:
1: Reached total allocation of 16375Mb: see help(memory.size)
2: Reached total allocation of 16375Mb: see help(memory.size)
3: Reached total allocation of 16375Mb: see help(memory.size)
4: Reached total allocation of 16375Mb: see help(memory.size)
R-2.15.3までは
1ベクトルのサイズは
231
-1まで(32ビット)
※ベクトルだけでなく,配列や行列などのオブジェクトにも同じ制約あり
10
これがもっともっと
長くなった
※ただし,いろいろと微妙らしい
前出の@kohskeさんのページ参照
出典: Wikipedia 太陽系
11
その比なんと
221
(≒106.3
)
/* both config.h and Rconfig.h set SIZEOF_SIZE_T, but Rconfig.h is
skipped if config.h has already been included. */
#ifndef R_CONFIG_H
# include <Rconfig.h>
#endif
#if ( SIZEOF_SIZE_T > 4 )
# define LONG_VECTOR_SUPPORT
#endif
#ifdef LONG_VECTOR_SUPPORT
typedef ptrdiff_t R_xlen_t;
typedef struct { R_xlen_t lv_length, lv_truelength; } R_long_vec_hdr_t;
# define R_XLEN_T_MAX 4503599627370496
# define R_SHORT_LEN_MAX 2147483647
# define R_LONG_VEC_TOKEN -1
252
231
-1
12
まさにマシマシ
13
コードも簡潔にchar *R_alloc(size_t nelem, int eltsize)
{
R_size_t size = nelem * eltsize;
double dsize = (double)nelem * eltsize;
if (dsize > 0) { /* precaution against integer
overflow on 32-bit*/
SEXP s;
#if SIZEOF_SIZE_T > 4
/* In this case by allocating larger units we can
get up to
size(Rcomplex) * (2^31 - 1) bytes, approx 16Gb
*/
if(dsize < R_LEN_T_MAX)
s = allocVector(RAWSXP, size + 1);
else if(dsize < sizeof(double) * (R_LEN_T_MAX - 1))
s = allocVector(REALSXP, (int)
(0.99+dsize/sizeof(double)));
else if(dsize < sizeof(Rcomplex) * (R_LEN_T_MAX -
1))
s = allocVector(CPLXSXP, (int)
(0.99+dsize/sizeof(Rcomplex)));
else {
error(_("cannot allocate memory block of size
%0.1f Gb"),
dsize/1024.0/1024.0/1024.0);
s = R_NilValue; /* -Wall */
}
#else
if(dsize > R_LEN_T_MAX) /* must be in the Gb range
*/
error(_("cannot allocate memory block of size
%0.1f Gb"),
dsize/1024.0/1024.0/1024.0);
s = allocVector(RAWSXP, size + 1);
#endif
ATTRIB(s) = R_VStack; R_VStack = s;
return (char *) DATAPTR(s);
}
else return NULL;
}
char *R_alloc(size_t nelem, int eltsize)
{
R_size_t size = nelem * eltsize;
/* doubles are a precaution against integer
overflow on 32-bit */
double dsize = (double) nelem * eltsize;
if (dsize > 0) {
SEXP s;
#ifdef LONG_VECTOR_SUPPORT
/* 64-bit platform: previous version used REALSXPs
*/
if(dsize > R_XLEN_T_MAX) /* currently 4096 TB */
error(_("cannot allocate memory block of size
%0.f Tb"),
dsize/pow(1024.0, 4.0));
s = allocVector(RAWSXP, size + 1);
#else
if(dsize > R_LEN_T_MAX) /* must be in the Gb range
*/
error(_("cannot allocate memory block of size
%0.1f Gb"),
dsize/pow(1024.0, 3.0));
s = allocVector(RAWSXP, size + 1);
#endif
ATTRIB(s) = R_VStack;
R_VStack = s;
return (char *) DATAPTR(s);
}
/* One programmer has relied on this, but it is
undocumented! */
else return NULL;
}
src/main/memory.c
(R.version.tar.gzを解凍)
14
あと,R.3.0.0では
パッケージを
入れ直す必要が
あることに注意
15
以上!
詳しくはこのあとの
@wdkzさんのLTで
16
SEXP attribute_hidden do_Rprofmem(SEXP call, SEXP op, SEXP args, SEXP rho)
{
SEXP filename;
R_size_t threshold;
int append_mode;
checkArity(op, args);
if (!isString(CAR(args)) || (LENGTH(CAR(args))) != 1)
error(_("invalid '%s' argument"), "filename");
append_mode = asLogical(CADR(args));
filename = STRING_ELT(CAR(args), 0);
threshold = REAL(CADDR(args))[0];
if (strlen(CHAR(filename)))
R_InitMemReporting(filename, append_mode, threshold);
else
R_EndMemReporting();
return R_NilValue;
}
#include "RBufferUtils.h"
attribute_hidden
void *R_AllocStringBuffer(size_t blen, R_StringBuffer *buf)
{
size_t blen1, bsize = buf->defaultSize;
/* for backwards compatibility, probably no longer needed */
if(blen == (size_t)-1) {
warning("R_AllocStringBuffer(-1) used: please report");
R_FreeStringBufferL(buf);
return NULL;
}
if(blen * sizeof(char) < buf->bufsize) return buf->data;
if(blen * sizeof(char) < buf->bufsize) return buf->data;
blen1 = blen = (blen + 1) * sizeof(char);
blen = (blen / bsize) * bsize;
if(blen < blen1) blen += bsize;
if(buf->data == NULL) {
buf->data = (char *) malloc(blen);
ところで
ソースコードが
読みにくくないか?
17
読みやすいコード発見namespace CXXR {
class String;
template <typename, SEXPTYPE,
typename Initializer = RObject::DoNothing> class FixedVector;
typedef FixedVector<int, INTSXP> IntVector;
typedef FixedVector<RHandle<>, VECSXP> ListVector;
typedef FixedVector<RHandle<String>, STRSXP> StringVector;
/** @brief Untemplated base class for R vectors.
*/
class VectorBase : public RObject {
public:
/**
* @param stype The required ::SEXPTYPE.
* @param sz The required number of elements in the vector.
*/
VectorBase(SEXPTYPE stype, std::size_t sz)
: RObject(stype), m_truelength(sz), m_size(sz)
{}
/** @brief Copy constructor.
*
* @param pattern VectorBase to be copied.
*/
VectorBase(const VectorBase& pattern)
: RObject(pattern), m_truelength(pattern.m_truelength),
m_size(pattern.m_size)
{}
クラスを用いて
オブジェクト指向で記
述
18
ドキュメントもある
19
その名はCXXR
CXXR: Refactorising R into C++
20
#include <iostream>
#include <fstream>
#include <boost/noncopyable.hpp>
class BigDataFrame : boost::noncopyable
{
public:
enum DataType {CHAR=1, SHORT=2, INT=3, DOUBLE=4, COMPLEX=5};
public:
BigDataFrame(index_type nrow, index_type ncol) : nrow_(nrow), ncol_(ncol) {
// initializing shared pointer
p = std::shared_ptr<Monitor>(new Monitor[ncol],
std::default_delete<Monitor[]>());
Rの中身を
C++で書き直す
プロジェクト
21
useR!2009,2010等で
発表されている
Provenance Tracking in CXXR 
(useR!2009)
CXXR and Add-on Packages
(useR!2010)
22
おわコンかと思いきや
最近の論文も
CXXR: an extensible R interpreter
23
調査して
いつかどこかで
紹介する(かも)

Weitere ähnliche Inhalte

Was ist angesagt?

TensorFlow White Paperを読む
TensorFlow White Paperを読むTensorFlow White Paperを読む
TensorFlow White Paperを読むYuta Kashino
 
統計解析言語Rにおける大規模データ管理のためのboost.interprocessの活用
統計解析言語Rにおける大規模データ管理のためのboost.interprocessの活用統計解析言語Rにおける大規模データ管理のためのboost.interprocessの活用
統計解析言語Rにおける大規模データ管理のためのboost.interprocessの活用Shintaro Fukushima
 
「plyrパッケージで君も前処理スタ☆」改め「plyrパッケージ徹底入門」
「plyrパッケージで君も前処理スタ☆」改め「plyrパッケージ徹底入門」「plyrパッケージで君も前処理スタ☆」改め「plyrパッケージ徹底入門」
「plyrパッケージで君も前処理スタ☆」改め「plyrパッケージ徹底入門」Nagi Teramo
 
Intoroduction of Pandas with Python
Intoroduction of Pandas with PythonIntoroduction of Pandas with Python
Intoroduction of Pandas with PythonAtsushi Hayakawa
 
mmapパッケージを使ってお手軽オブジェクト管理
mmapパッケージを使ってお手軽オブジェクト管理mmapパッケージを使ってお手軽オブジェクト管理
mmapパッケージを使ってお手軽オブジェクト管理Shintaro Fukushima
 
Rが苦手な人にもRを使って頂くために~RcommanderとRook~
Rが苦手な人にもRを使って頂くために~RcommanderとRook~Rが苦手な人にもRを使って頂くために~RcommanderとRook~
Rが苦手な人にもRを使って頂くために~RcommanderとRook~Kazuya Wada
 
PostgreSQLとPythonとSQL
PostgreSQLとPythonとSQLPostgreSQLとPythonとSQL
PostgreSQLとPythonとSQLSatoshi Yamada
 
Sounds Like Common Lisp - ゼロからはじめるサウンドプログラミング
Sounds Like Common Lisp - ゼロからはじめるサウンドプログラミングSounds Like Common Lisp - ゼロからはじめるサウンドプログラミング
Sounds Like Common Lisp - ゼロからはじめるサウンドプログラミングt-sin
 
いまさら聞けないRake入門
いまさら聞けないRake入門いまさら聞けないRake入門
いまさら聞けないRake入門Tomoya Kawanishi
 
Deep Learningと他の分類器をRで比べてみよう in Japan.R 2014
Deep Learningと他の分類器をRで比べてみよう in Japan.R 2014Deep Learningと他の分類器をRで比べてみよう in Japan.R 2014
Deep Learningと他の分類器をRで比べてみよう in Japan.R 2014Takashi J OZAKI
 
BlockSorting
BlockSortingBlockSorting
BlockSortingiuno
 
Rあんなときこんなとき(tokyo r#12)
Rあんなときこんなとき(tokyo r#12)Rあんなときこんなとき(tokyo r#12)
Rあんなときこんなとき(tokyo r#12)Shintaro Fukushima
 
Node.js - sleep sort algorithm
Node.js - sleep sort algorithmNode.js - sleep sort algorithm
Node.js - sleep sort algorithmtakesako
 
入門機械学習1,2章
入門機械学習1,2章入門機械学習1,2章
入門機械学習1,2章Kazufumi Ohkawa
 

Was ist angesagt? (20)

R高速化
R高速化R高速化
R高速化
 
TensorFlow White Paperを読む
TensorFlow White Paperを読むTensorFlow White Paperを読む
TensorFlow White Paperを読む
 
統計解析言語Rにおける大規模データ管理のためのboost.interprocessの活用
統計解析言語Rにおける大規模データ管理のためのboost.interprocessの活用統計解析言語Rにおける大規模データ管理のためのboost.interprocessの活用
統計解析言語Rにおける大規模データ管理のためのboost.interprocessの活用
 
R-hpc-1 TokyoR#11
R-hpc-1 TokyoR#11R-hpc-1 TokyoR#11
R-hpc-1 TokyoR#11
 
Glibc malloc internal
Glibc malloc internalGlibc malloc internal
Glibc malloc internal
 
「plyrパッケージで君も前処理スタ☆」改め「plyrパッケージ徹底入門」
「plyrパッケージで君も前処理スタ☆」改め「plyrパッケージ徹底入門」「plyrパッケージで君も前処理スタ☆」改め「plyrパッケージ徹底入門」
「plyrパッケージで君も前処理スタ☆」改め「plyrパッケージ徹底入門」
 
Intoroduction of Pandas with Python
Intoroduction of Pandas with PythonIntoroduction of Pandas with Python
Intoroduction of Pandas with Python
 
mmapパッケージを使ってお手軽オブジェクト管理
mmapパッケージを使ってお手軽オブジェクト管理mmapパッケージを使ってお手軽オブジェクト管理
mmapパッケージを使ってお手軽オブジェクト管理
 
仮想記憶の構築法
仮想記憶の構築法仮想記憶の構築法
仮想記憶の構築法
 
Rが苦手な人にもRを使って頂くために~RcommanderとRook~
Rが苦手な人にもRを使って頂くために~RcommanderとRook~Rが苦手な人にもRを使って頂くために~RcommanderとRook~
Rが苦手な人にもRを使って頂くために~RcommanderとRook~
 
PostgreSQLとPythonとSQL
PostgreSQLとPythonとSQLPostgreSQLとPythonとSQL
PostgreSQLとPythonとSQL
 
Sounds Like Common Lisp - ゼロからはじめるサウンドプログラミング
Sounds Like Common Lisp - ゼロからはじめるサウンドプログラミングSounds Like Common Lisp - ゼロからはじめるサウンドプログラミング
Sounds Like Common Lisp - ゼロからはじめるサウンドプログラミング
 
いまさら聞けないRake入門
いまさら聞けないRake入門いまさら聞けないRake入門
いまさら聞けないRake入門
 
Deep Learningと他の分類器をRで比べてみよう in Japan.R 2014
Deep Learningと他の分類器をRで比べてみよう in Japan.R 2014Deep Learningと他の分類器をRで比べてみよう in Japan.R 2014
Deep Learningと他の分類器をRで比べてみよう in Japan.R 2014
 
BlockSorting
BlockSortingBlockSorting
BlockSorting
 
Tokyo r30 beginner
Tokyo r30 beginnerTokyo r30 beginner
Tokyo r30 beginner
 
R -> Python
R -> PythonR -> Python
R -> Python
 
Rあんなときこんなとき(tokyo r#12)
Rあんなときこんなとき(tokyo r#12)Rあんなときこんなとき(tokyo r#12)
Rあんなときこんなとき(tokyo r#12)
 
Node.js - sleep sort algorithm
Node.js - sleep sort algorithmNode.js - sleep sort algorithm
Node.js - sleep sort algorithm
 
入門機械学習1,2章
入門機械学習1,2章入門機械学習1,2章
入門機械学習1,2章
 

Ähnlich wie R3.0.0 is relased

golang binary hacks
golang binary hacksgolang binary hacks
golang binary hacksyaegashi
 
ラズパイでデバイスドライバを作ってみた。
ラズパイでデバイスドライバを作ってみた。ラズパイでデバイスドライバを作ってみた。
ラズパイでデバイスドライバを作ってみた。Kazuki Onishi
 
CouchDB JP & BigCouch
CouchDB JP & BigCouchCouchDB JP & BigCouch
CouchDB JP & BigCouchYohei Sasaki
 
機械学習 / Deep Learning 大全 (4) GPU編
機械学習 / Deep Learning 大全 (4) GPU編機械学習 / Deep Learning 大全 (4) GPU編
機械学習 / Deep Learning 大全 (4) GPU編Daiyu Hatakeyama
 
Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力
Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力
Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力ThinReports
 
Linux 対応だけじゃない!! sql server 2017 こんな機能が追加されています。
Linux 対応だけじゃない!! sql server 2017 こんな機能が追加されています。Linux 対応だけじゃない!! sql server 2017 こんな機能が追加されています。
Linux 対応だけじゃない!! sql server 2017 こんな機能が追加されています。Masayuki Ozawa
 
Linux/DB Tuning (DevSumi2010, Japanese)
Linux/DB Tuning (DevSumi2010, Japanese)Linux/DB Tuning (DevSumi2010, Japanese)
Linux/DB Tuning (DevSumi2010, Japanese)Yoshinori Matsunobu
 
Oracle Cloud Developers Meetup@東京
Oracle Cloud Developers Meetup@東京Oracle Cloud Developers Meetup@東京
Oracle Cloud Developers Meetup@東京tuchimur
 
文献紹介:Extreme Low-Resolution Activity Recognition Using a Super-Resolution-Ori...
文献紹介:Extreme Low-Resolution Activity Recognition Using a Super-Resolution-Ori...文献紹介:Extreme Low-Resolution Activity Recognition Using a Super-Resolution-Ori...
文献紹介:Extreme Low-Resolution Activity Recognition Using a Super-Resolution-Ori...Toru Tamaki
 
Goでヤフーの分散オブジェクトストレージを作った話 Go Conference 2017 Spring
Goでヤフーの分散オブジェクトストレージを作った話 Go Conference 2017 SpringGoでヤフーの分散オブジェクトストレージを作った話 Go Conference 2017 Spring
Goでヤフーの分散オブジェクトストレージを作った話 Go Conference 2017 SpringYahoo!デベロッパーネットワーク
 
LLVMで遊ぶ(整数圧縮とか、x86向けの自動ベクトル化とか)
LLVMで遊ぶ(整数圧縮とか、x86向けの自動ベクトル化とか)LLVMで遊ぶ(整数圧縮とか、x86向けの自動ベクトル化とか)
LLVMで遊ぶ(整数圧縮とか、x86向けの自動ベクトル化とか)Takeshi Yamamuro
 
Inside mobage platform
Inside mobage platformInside mobage platform
Inside mobage platformToru Yamaguchi
 
多次元配列の効率的利用法の検討
多次元配列の効率的利用法の検討多次元配列の効率的利用法の検討
多次元配列の効率的利用法の検討Yu Sato
 

Ähnlich wie R3.0.0 is relased (20)

golang binary hacks
golang binary hacksgolang binary hacks
golang binary hacks
 
Apache Hadoopの未来 3系になって何が変わるのか?
Apache Hadoopの未来 3系になって何が変わるのか?Apache Hadoopの未来 3系になって何が変わるのか?
Apache Hadoopの未来 3系になって何が変わるのか?
 
ラズパイでデバイスドライバを作ってみた。
ラズパイでデバイスドライバを作ってみた。ラズパイでデバイスドライバを作ってみた。
ラズパイでデバイスドライバを作ってみた。
 
Cpu cache arch
Cpu cache archCpu cache arch
Cpu cache arch
 
Rを用いたGIS
Rを用いたGISRを用いたGIS
Rを用いたGIS
 
V6 unix in okinawa
V6 unix in okinawaV6 unix in okinawa
V6 unix in okinawa
 
osoljp 2011.08
osoljp 2011.08osoljp 2011.08
osoljp 2011.08
 
CouchDB JP & BigCouch
CouchDB JP & BigCouchCouchDB JP & BigCouch
CouchDB JP & BigCouch
 
機械学習 / Deep Learning 大全 (4) GPU編
機械学習 / Deep Learning 大全 (4) GPU編機械学習 / Deep Learning 大全 (4) GPU編
機械学習 / Deep Learning 大全 (4) GPU編
 
Prosym2012
Prosym2012Prosym2012
Prosym2012
 
Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力
Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力
Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力
 
Linux 対応だけじゃない!! sql server 2017 こんな機能が追加されています。
Linux 対応だけじゃない!! sql server 2017 こんな機能が追加されています。Linux 対応だけじゃない!! sql server 2017 こんな機能が追加されています。
Linux 対応だけじゃない!! sql server 2017 こんな機能が追加されています。
 
Linux/DB Tuning (DevSumi2010, Japanese)
Linux/DB Tuning (DevSumi2010, Japanese)Linux/DB Tuning (DevSumi2010, Japanese)
Linux/DB Tuning (DevSumi2010, Japanese)
 
Oracle Cloud Developers Meetup@東京
Oracle Cloud Developers Meetup@東京Oracle Cloud Developers Meetup@東京
Oracle Cloud Developers Meetup@東京
 
文献紹介:Extreme Low-Resolution Activity Recognition Using a Super-Resolution-Ori...
文献紹介:Extreme Low-Resolution Activity Recognition Using a Super-Resolution-Ori...文献紹介:Extreme Low-Resolution Activity Recognition Using a Super-Resolution-Ori...
文献紹介:Extreme Low-Resolution Activity Recognition Using a Super-Resolution-Ori...
 
Goでヤフーの分散オブジェクトストレージを作った話 Go Conference 2017 Spring
Goでヤフーの分散オブジェクトストレージを作った話 Go Conference 2017 SpringGoでヤフーの分散オブジェクトストレージを作った話 Go Conference 2017 Spring
Goでヤフーの分散オブジェクトストレージを作った話 Go Conference 2017 Spring
 
Tokyo r33 beginner
Tokyo r33 beginnerTokyo r33 beginner
Tokyo r33 beginner
 
LLVMで遊ぶ(整数圧縮とか、x86向けの自動ベクトル化とか)
LLVMで遊ぶ(整数圧縮とか、x86向けの自動ベクトル化とか)LLVMで遊ぶ(整数圧縮とか、x86向けの自動ベクトル化とか)
LLVMで遊ぶ(整数圧縮とか、x86向けの自動ベクトル化とか)
 
Inside mobage platform
Inside mobage platformInside mobage platform
Inside mobage platform
 
多次元配列の効率的利用法の検討
多次元配列の効率的利用法の検討多次元配列の効率的利用法の検討
多次元配列の効率的利用法の検討
 

Mehr von Shintaro Fukushima

20230216_Python機械学習プログラミング.pdf
20230216_Python機械学習プログラミング.pdf20230216_Python機械学習プログラミング.pdf
20230216_Python機械学習プログラミング.pdfShintaro Fukushima
 
機械学習品質管理・保証の動向と取り組み
機械学習品質管理・保証の動向と取り組み機械学習品質管理・保証の動向と取り組み
機械学習品質管理・保証の動向と取り組みShintaro Fukushima
 
Materials Informatics and Python
Materials Informatics and PythonMaterials Informatics and Python
Materials Informatics and PythonShintaro Fukushima
 
最近のRのランダムフォレストパッケージ -ranger/Rborist-
最近のRのランダムフォレストパッケージ -ranger/Rborist-最近のRのランダムフォレストパッケージ -ranger/Rborist-
最近のRのランダムフォレストパッケージ -ranger/Rborist-Shintaro Fukushima
 
Why dont you_create_new_spark_jl
Why dont you_create_new_spark_jlWhy dont you_create_new_spark_jl
Why dont you_create_new_spark_jlShintaro Fukushima
 
Rユーザのためのspark入門
Rユーザのためのspark入門Rユーザのためのspark入門
Rユーザのためのspark入門Shintaro Fukushima
 
Juliaによる予測モデル構築・評価
Juliaによる予測モデル構築・評価Juliaによる予測モデル構築・評価
Juliaによる予測モデル構築・評価Shintaro Fukushima
 
機械学習を用いた予測モデル構築・評価
機械学習を用いた予測モデル構築・評価機械学習を用いた予測モデル構築・評価
機械学習を用いた予測モデル構築・評価Shintaro Fukushima
 
データサイエンスワールドからC++を眺めてみる
データサイエンスワールドからC++を眺めてみるデータサイエンスワールドからC++を眺めてみる
データサイエンスワールドからC++を眺めてみるShintaro Fukushima
 
data.tableパッケージで大規模データをサクッと処理する
data.tableパッケージで大規模データをサクッと処理するdata.tableパッケージで大規模データをサクッと処理する
data.tableパッケージで大規模データをサクッと処理するShintaro Fukushima
 
アクションマイニングを用いた最適なアクションの導出
アクションマイニングを用いた最適なアクションの導出アクションマイニングを用いた最適なアクションの導出
アクションマイニングを用いた最適なアクションの導出Shintaro Fukushima
 
不均衡データのクラス分類
不均衡データのクラス分類不均衡データのクラス分類
不均衡データのクラス分類Shintaro Fukushima
 
Numpy scipyで独立成分分析
Numpy scipyで独立成分分析Numpy scipyで独立成分分析
Numpy scipyで独立成分分析Shintaro Fukushima
 

Mehr von Shintaro Fukushima (18)

20230216_Python機械学習プログラミング.pdf
20230216_Python機械学習プログラミング.pdf20230216_Python機械学習プログラミング.pdf
20230216_Python機械学習プログラミング.pdf
 
機械学習品質管理・保証の動向と取り組み
機械学習品質管理・保証の動向と取り組み機械学習品質管理・保証の動向と取り組み
機械学習品質管理・保証の動向と取り組み
 
Materials Informatics and Python
Materials Informatics and PythonMaterials Informatics and Python
Materials Informatics and Python
 
BPstudy sklearn 20180925
BPstudy sklearn 20180925BPstudy sklearn 20180925
BPstudy sklearn 20180925
 
最近のRのランダムフォレストパッケージ -ranger/Rborist-
最近のRのランダムフォレストパッケージ -ranger/Rborist-最近のRのランダムフォレストパッケージ -ranger/Rborist-
最近のRのランダムフォレストパッケージ -ranger/Rborist-
 
Why dont you_create_new_spark_jl
Why dont you_create_new_spark_jlWhy dont you_create_new_spark_jl
Why dont you_create_new_spark_jl
 
Rユーザのためのspark入門
Rユーザのためのspark入門Rユーザのためのspark入門
Rユーザのためのspark入門
 
Juliaによる予測モデル構築・評価
Juliaによる予測モデル構築・評価Juliaによる予測モデル構築・評価
Juliaによる予測モデル構築・評価
 
Juliaで並列計算
Juliaで並列計算Juliaで並列計算
Juliaで並列計算
 
機械学習を用いた予測モデル構築・評価
機械学習を用いた予測モデル構築・評価機械学習を用いた予測モデル構築・評価
機械学習を用いた予測モデル構築・評価
 
データサイエンスワールドからC++を眺めてみる
データサイエンスワールドからC++を眺めてみるデータサイエンスワールドからC++を眺めてみる
データサイエンスワールドからC++を眺めてみる
 
data.tableパッケージで大規模データをサクッと処理する
data.tableパッケージで大規模データをサクッと処理するdata.tableパッケージで大規模データをサクッと処理する
data.tableパッケージで大規模データをサクッと処理する
 
アクションマイニングを用いた最適なアクションの導出
アクションマイニングを用いた最適なアクションの導出アクションマイニングを用いた最適なアクションの導出
アクションマイニングを用いた最適なアクションの導出
 
外れ値
外れ値外れ値
外れ値
 
不均衡データのクラス分類
不均衡データのクラス分類不均衡データのクラス分類
不均衡データのクラス分類
 
Numpy scipyで独立成分分析
Numpy scipyで独立成分分析Numpy scipyで独立成分分析
Numpy scipyで独立成分分析
 
Rで学ぶロバスト推定
Rで学ぶロバスト推定Rで学ぶロバスト推定
Rで学ぶロバスト推定
 
Tokyo.R(#07)
Tokyo.R(#07)Tokyo.R(#07)
Tokyo.R(#07)
 

R3.0.0 is relased

  • 3. 3 R-3.0.0 リリース! The R Project for Statistical Computing
  • 9. 9 > x <- rep(0, 2^31-1) > x <- rep(0, 2^31) エラー: サイズ 8.0 Gb のベクトルを割り当てることができません 追加情報: 警告メッセージ: 1: Reached total allocation of 16375Mb: see help(memory.size) 2: Reached total allocation of 16375Mb: see help(memory.size) 3: Reached total allocation of 16375Mb: see help(memory.size) 4: Reached total allocation of 16375Mb: see help(memory.size) R-2.15.3までは 1ベクトルのサイズは 231 -1まで(32ビット) ※ベクトルだけでなく,配列や行列などのオブジェクトにも同じ制約あり
  • 11. 11 その比なんと 221 (≒106.3 ) /* both config.h and Rconfig.h set SIZEOF_SIZE_T, but Rconfig.h is skipped if config.h has already been included. */ #ifndef R_CONFIG_H # include <Rconfig.h> #endif #if ( SIZEOF_SIZE_T > 4 ) # define LONG_VECTOR_SUPPORT #endif #ifdef LONG_VECTOR_SUPPORT typedef ptrdiff_t R_xlen_t; typedef struct { R_xlen_t lv_length, lv_truelength; } R_long_vec_hdr_t; # define R_XLEN_T_MAX 4503599627370496 # define R_SHORT_LEN_MAX 2147483647 # define R_LONG_VEC_TOKEN -1 252 231 -1
  • 13. 13 コードも簡潔にchar *R_alloc(size_t nelem, int eltsize) { R_size_t size = nelem * eltsize; double dsize = (double)nelem * eltsize; if (dsize > 0) { /* precaution against integer overflow on 32-bit*/ SEXP s; #if SIZEOF_SIZE_T > 4 /* In this case by allocating larger units we can get up to size(Rcomplex) * (2^31 - 1) bytes, approx 16Gb */ if(dsize < R_LEN_T_MAX) s = allocVector(RAWSXP, size + 1); else if(dsize < sizeof(double) * (R_LEN_T_MAX - 1)) s = allocVector(REALSXP, (int) (0.99+dsize/sizeof(double))); else if(dsize < sizeof(Rcomplex) * (R_LEN_T_MAX - 1)) s = allocVector(CPLXSXP, (int) (0.99+dsize/sizeof(Rcomplex))); else { error(_("cannot allocate memory block of size %0.1f Gb"), dsize/1024.0/1024.0/1024.0); s = R_NilValue; /* -Wall */ } #else if(dsize > R_LEN_T_MAX) /* must be in the Gb range */ error(_("cannot allocate memory block of size %0.1f Gb"), dsize/1024.0/1024.0/1024.0); s = allocVector(RAWSXP, size + 1); #endif ATTRIB(s) = R_VStack; R_VStack = s; return (char *) DATAPTR(s); } else return NULL; } char *R_alloc(size_t nelem, int eltsize) { R_size_t size = nelem * eltsize; /* doubles are a precaution against integer overflow on 32-bit */ double dsize = (double) nelem * eltsize; if (dsize > 0) { SEXP s; #ifdef LONG_VECTOR_SUPPORT /* 64-bit platform: previous version used REALSXPs */ if(dsize > R_XLEN_T_MAX) /* currently 4096 TB */ error(_("cannot allocate memory block of size %0.f Tb"), dsize/pow(1024.0, 4.0)); s = allocVector(RAWSXP, size + 1); #else if(dsize > R_LEN_T_MAX) /* must be in the Gb range */ error(_("cannot allocate memory block of size %0.1f Gb"), dsize/pow(1024.0, 3.0)); s = allocVector(RAWSXP, size + 1); #endif ATTRIB(s) = R_VStack; R_VStack = s; return (char *) DATAPTR(s); } /* One programmer has relied on this, but it is undocumented! */ else return NULL; } src/main/memory.c (R.version.tar.gzを解凍)
  • 16. 16 SEXP attribute_hidden do_Rprofmem(SEXP call, SEXP op, SEXP args, SEXP rho) { SEXP filename; R_size_t threshold; int append_mode; checkArity(op, args); if (!isString(CAR(args)) || (LENGTH(CAR(args))) != 1) error(_("invalid '%s' argument"), "filename"); append_mode = asLogical(CADR(args)); filename = STRING_ELT(CAR(args), 0); threshold = REAL(CADDR(args))[0]; if (strlen(CHAR(filename))) R_InitMemReporting(filename, append_mode, threshold); else R_EndMemReporting(); return R_NilValue; } #include "RBufferUtils.h" attribute_hidden void *R_AllocStringBuffer(size_t blen, R_StringBuffer *buf) { size_t blen1, bsize = buf->defaultSize; /* for backwards compatibility, probably no longer needed */ if(blen == (size_t)-1) { warning("R_AllocStringBuffer(-1) used: please report"); R_FreeStringBufferL(buf); return NULL; } if(blen * sizeof(char) < buf->bufsize) return buf->data; if(blen * sizeof(char) < buf->bufsize) return buf->data; blen1 = blen = (blen + 1) * sizeof(char); blen = (blen / bsize) * bsize; if(blen < blen1) blen += bsize; if(buf->data == NULL) { buf->data = (char *) malloc(blen); ところで ソースコードが 読みにくくないか?
  • 17. 17 読みやすいコード発見namespace CXXR { class String; template <typename, SEXPTYPE, typename Initializer = RObject::DoNothing> class FixedVector; typedef FixedVector<int, INTSXP> IntVector; typedef FixedVector<RHandle<>, VECSXP> ListVector; typedef FixedVector<RHandle<String>, STRSXP> StringVector; /** @brief Untemplated base class for R vectors. */ class VectorBase : public RObject { public: /** * @param stype The required ::SEXPTYPE. * @param sz The required number of elements in the vector. */ VectorBase(SEXPTYPE stype, std::size_t sz) : RObject(stype), m_truelength(sz), m_size(sz) {} /** @brief Copy constructor. * * @param pattern VectorBase to be copied. */ VectorBase(const VectorBase& pattern) : RObject(pattern), m_truelength(pattern.m_truelength), m_size(pattern.m_size) {} クラスを用いて オブジェクト指向で記 述
  • 20. 20 #include <iostream> #include <fstream> #include <boost/noncopyable.hpp> class BigDataFrame : boost::noncopyable { public: enum DataType {CHAR=1, SHORT=2, INT=3, DOUBLE=4, COMPLEX=5}; public: BigDataFrame(index_type nrow, index_type ncol) : nrow_(nrow), ncol_(ncol) { // initializing shared pointer p = std::shared_ptr<Monitor>(new Monitor[ncol], std::default_delete<Monitor[]>()); Rの中身を C++で書き直す プロジェクト
  • 21. 21 useR!2009,2010等で 発表されている Provenance Tracking in CXXR  (useR!2009) CXXR and Add-on Packages (useR!2010)