将 Rcpp::String 从 table 转换为模式函数的 int
Convert Rcpp::String from table to int for a mode function
我想从 IntegerVector
中获取最频繁的值(例如模式)。我只能使用 Rcpp 糖函数。
如何将输出从 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))
*/
维尼克:
> pier(c(3,2,2,2,2,4,4,5))
[1] "2"
它是正确的,但我需要的是数值 2
而不是我目前收到的字符串值 "2"
。此外,在将函数导出到 R 后,我需要在 Rcpp 和 not 中转换它,
如果您使用的是 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"
我想从 IntegerVector
中获取最频繁的值(例如模式)。我只能使用 Rcpp 糖函数。
如何将输出从 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))
*/
维尼克:
> pier(c(3,2,2,2,2,4,4,5))
[1] "2"
它是正确的,但我需要的是数值 2
而不是我目前收到的字符串值 "2"
。此外,在将函数导出到 R 后,我需要在 Rcpp 和 not 中转换它,
如果您使用的是 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"