如何检查 Rcpp List 对象中是否存在名称?
How to check if a name exists in Rcpp List object?
是否可以检查传递给 Rcpp 函数的列表对象中是否存在名称?
在 base R 中,这可以通过以下方式检查:
"a" %in% names(foo)
虽然注意到这种方法的困难 (here)。 Rcpp 函数是否有等效的方法?谢谢
这是一个非常简单的第一关。您也可以使用字符串向量的 STL 成员进行匹配等等。
代码
#include <Rcpp.h>
// [[Rcpp::export]]
bool contains(std::string s, Rcpp::List L) {
Rcpp::CharacterVector nv = L.names();
for (int i=0; i<nv.size(); i++) {
if (std::string(nv[i]) == s) {
return true;
}
}
return false;
}
/*** R
l <- list(aa="a", bb=1.23, cc=LETTERS[1:4])
contains("aaa", l) # false
contains("bb", l) # true
*/
输出
> Rcpp::sourceCpp("~/git/Whosebug/68397853/answer.cpp")
> l <- list(aa="a", bb=1.23, cc=LETTERS[1:4])
> contains("aaa", l) # false
[1] FALSE
> contains("bb", l) # true
[1] TRUE
>
隐隐约约的感觉以前可能回答过类似的问题,and/or写过类似的辅助函数。无论如何,做一个简单的大约需要一分钟,所以如果有疑问就去做。
是否可以检查传递给 Rcpp 函数的列表对象中是否存在名称?
在 base R 中,这可以通过以下方式检查:
"a" %in% names(foo)
虽然注意到这种方法的困难 (here)。 Rcpp 函数是否有等效的方法?谢谢
这是一个非常简单的第一关。您也可以使用字符串向量的 STL 成员进行匹配等等。
代码
#include <Rcpp.h>
// [[Rcpp::export]]
bool contains(std::string s, Rcpp::List L) {
Rcpp::CharacterVector nv = L.names();
for (int i=0; i<nv.size(); i++) {
if (std::string(nv[i]) == s) {
return true;
}
}
return false;
}
/*** R
l <- list(aa="a", bb=1.23, cc=LETTERS[1:4])
contains("aaa", l) # false
contains("bb", l) # true
*/
输出
> Rcpp::sourceCpp("~/git/Whosebug/68397853/answer.cpp")
> l <- list(aa="a", bb=1.23, cc=LETTERS[1:4])
> contains("aaa", l) # false
[1] FALSE
> contains("bb", l) # true
[1] TRUE
>
隐隐约约的感觉以前可能回答过类似的问题,and/or写过类似的辅助函数。无论如何,做一个简单的大约需要一分钟,所以如果有疑问就去做。