dat <- sample(letters[1:20],size = 30,replace = T)
pat <- c('a',"c","g")
dat
[1] "h""c""q""a""s""a""d""b""c""n""a""t""e""q""s""k""j""t""l""j""n""t""r""m""h"
[26] "b""o""e""g""h"
pat
[1] "a""c""g"
microbenchmark::microbenchmark( yes_seq(pat,dat), yes_seq_cpp(pat,dat))
Unit: microseconds
expr min lq mean median uq max neval cld
yes_seq(pat, dat) 42.19343.33344.7871243.90345.0435106.052100 b
yes_seq_cpp(pat, dat) 5.7015.9876.619936.2726.842522.807100 a
別の大きな文字列からパターン/シーケンスを検索し、見つかった場合はITINA、そうでない場合はFalseとする関数があります。
図解
Rkで関数を持っているのですが、大きな計算には遅いです、というか、異なるスタイルで書かれた関数がいくつもあります...。
入力データはこのような感じである。
これが標準的なスタイルで書かれた最初のs1 関数で、わかりやすいが面倒だ。
よりエレガントなs2。
どちらも同じことをする。
この簡単な関数をrcppで書いてくれませんか?
レシェトフが数十ページ前にやったようにね。
(ライブラリーの話ではない)
別の大きな文字列からパターン/シーケンスを検索する関数があります。
図解
Rkで関数を持っているのですが、大きな計算には遅い、というか、異なるスタイルで書かれた関数がいくつもあるくらいです......。
入力データはこんな感じです。ちなみに文字列はどちらも任意の長さにできます。
最初のs1 関数は標準的なスタイルで書かれている。
あるいはs2の ようにもっとエレガントなものもある。
どちらも同じことをする
この簡単な関数をrcppで書いてもらえませんか?
私は時間がないし、コーディングやデバッグがあまり好きではないので、それをする準備ができていません。それに、自分で考えた方が役に立つだろう。もし可能なら、技術的な質問にお答えします。
私は自由な時間がないし、コーディングやデバッグがあまり好きではないので、引き受ける準備ができていない。それに、自分で解決した方が役に立つだろう。もし可能であれば、技術的な質問にお答えします。
助けてくれなくてありがとう)自分で解決しました。)
Rコード
Rcppのコード
質問があります: pat datの入力変数に、(現在のように)数値ベクトルと文字列ベクトルの両方を受け入れるようにするにはどうすればよいでしょうか?
p.s.この関数は6倍しか速くならないことが判明しました(( 少なくとも100倍は速くなると思っていました((
助けてくれてありがとう)自分で解決したんだ。)
Rコード
Rcppコード
質問があります: pat datの入力変数に数値ベクトル(現在のように)と文字列ベクトルの両方を受け入れるようにするにはどうすればよいですか?
p.s.この関数は6倍しか速くならないことが判明しました(( 少なくとも100倍は速くなると思っていました((
このコードはRでコンパイルできる。ほぼ3倍速くなった。
forの代わりにforeachを使い、すべてのカーネルをロードする。
Rのコードをコンパイル(compile)することができる。3倍近くスピードアップした。
forの代わりにforeachを使い、すべてのカーネルをロードする。
R 3.4 以降、 すべてのRコードにcmpfun コンパイルが デフォルトで含まれて いる。
https://stackoverflow.com/questions/41502721/could-someone-explain-what-compiling-in-r-is-and-why-it-would-speed-up-this-cR 3.4 以降、 すべての R コードにcmpfun コンパイルが デフォルトで含まれて います。
https:// stackoverflow.com/questions/41502721/could-someone-explain-what-compiling-in-r-is-and-why-it-would-speed-up-this-cこの投稿で、パッケージの更新時に、バイトコンパイルと遅延ロードのためのパッケージの準備の行を 見ることができる方法で、 パッケージを常にコンパイルするようになったようだと理解した。
しかし、私はユーザーコードはコンパイルされていないと思います。我々は、ソースによって関数をロードし、私はソースの説明では、ロードされる関数がコンパイルされていることを見なかった
この投稿は、私はそれが常にパッケージの更新時に見ることができる方法で、パッケージをコンパイルするようであることを理解し、バイトコンパイルと遅延ロードのためにパッケージを準備行。
しかし、私はユーザーコードはコンパイルされていないと信じています。我々は、ソースによって関数をロードし、私はソースの説明で、ロードされる関数がコンパイルされていることを見ていない
うーん、試してみよう。
質問があります。pat datの入力変数に、(現在のように)数値ベクトルと文字列ベクトルの両方を受け付けるようにするにはどうすればいいでしょうか?
オーバーロードする最初のアイデアは、同じ名前で異なる引数を持つ別の関数を書くことです。Rcppでこれをやったことがないので、うまくいくかどうかわからない。おそらくCのコードを別のファイルにして、cppFunction()の代わりにsourceCpp()を使うことになるだろう。