2016-12-27 5 views
0

IntegerVectorから最も頻繁な値(モードなど)を取得したい。私はRcppの砂糖機能だけを使うことができます。mode関数のためにRcpp :: Stringをテーブルからintに変換する

出力をStringからintに変換するにはどうすればよいですか?

マイコード:

// [[Rcpp::export]] 
String pier(NumericVector x) { 
    IntegerVector wyniki; 
    int max; 
    wyniki = Rcpp::table(x); 
    max = which_max(wyniki); 
    CharacterVector wynik_nazwy = wyniki.attr("names"); 
    String wynik = wynik_nazwy[max]; 
    return wynik; 
} 

/***R 
pier(c(3,2,2,2,2,4,4,5)) 
*/ 

WYNIK:

> pier(c(3,2,2,2,2,4,4,5)) 
[1] "2" 

それは正しいですが、私は現在受け付けており、数値2の代わりに、文字列値"2"を必要とします。あなたが変換し、その後// [[Rcpp::plugins(cpp11)]]が定義されていなかったので、それがそうであるように見えるC++ 98を、使用している場合はさらに、IはR、

+2

それは_R_に依存しているとして、これは_R_ベースの質問を_is_パッケージ_Rcpp_と_R_データ型を扱います。しかしそれは_not_ _Rcpp11_質問です。 – coatless

+0

Rパートについては、 'as.numeric(pier(c、3,2,2,2,2,4,4,5)))'を試してください。 – G5W

答えて

4

に関数をエクスポートした後Rcppにし、ないそれを変換する必要があります文字列を整数に変換するには、atoi()関数と文字列の.c_str()関数を使用します。

std::string ex = "1"; 
int res = atoi(ex.c_str()); 

事項を簡素化するために、.c_str()の使用は@nrussellで指摘したように、この場合には、明示的である必要はありません。これにより、仲介業者std::stringを作成し、CharacterVectorにアクセスして返されたものだけを使用する必要がなくなります。


したがって、このように述べた、我々は次のように終わる:

// [[Rcpp::export]] 
int pier(NumericVector x) { 
    IntegerVector wyniki; 
    int max; 
    wyniki = Rcpp::table(x); 
    max = which_max(wyniki); 
    CharacterVector wynik_nazwy = wyniki.attr("names"); 
    return atoi(wynik_nazwy[max]); 
} 

テスト:G5W @

pier(c(3,2,2,2,2,4,4,5)) 
# [1] 2 
class(pier(c(3,2,2,2,2,4,4,5))) 
# [1] "integer" 
+1

明示的な 'as 'の代わりに、 'std :: string wynik(wynik_nazwy [max]);で呼び出されている'演算子char * 'に頼ることができるはずです。 – nrussell

関連する問題