2016-12-27 83 views
0

我想從IntegerVector中獲取最頻繁的值(例如模式)。我只能使用Rcpp糖的功能。將表中的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和導出功能R後,

+2

@ G5W,因爲它依賴於_R_這_is_基於_R_個問題打包_Rcpp_並處理_R_數據類型。然而,這不是一個_Rcpp11_問題。 – coatless

+0

對於R部分,試試as.numeric(pier(c(3,2,2,2,2,4,4,5)))' – G5W

回答

4

如果您正在使用C++ 98,這看起來是因爲// [[Rcpp::plugins(cpp11)]]沒有定義的話,那麼到轉換字符串轉換爲整數使用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]); 
} 

測試:

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

好的答案;你應該可以依靠在'std :: string wynik(wynik_nazwy [max])中調用'operator char *';'作爲這個顯式的替代方案。 – nrussell