首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Rcpp中的is_NA()与all()结合使用时

Rcpp中的is_NA()与all()结合使用时
EN

Stack Overflow用户
提问于 2018-01-13 01:55:45
回答 2查看 124关注 0票数 2

谁能告诉我为什么下面的代码返回TRUE。这让我很困惑。

代码语言:javascript
运行
复制
> require(Rcpp)
Loading required package: Rcpp
Warning message:
package ‘Rcpp’ was built under R version 3.3.3 
> src12 <- '
+ #include <Rcpp.h>
+ using namespace Rcpp;
+ 
+ // [[Rcpp::plugins("cpp11")]]
+ 
+ // [[Rcpp::export]]
+ bool is_naFUN() {
+ 
+ LogicalVector y = {TRUE,FALSE};
+ bool x = is_na(all(y == NA_LOGICAL));
+ 
+ return x;
+ }
+ '
> sourceCpp(code = src12)
> is_naFUN()
[1] TRUE

实际上,它就在这里。我正在学习教程。rcppforeveryone-functions-related-to-logical-values如何对Rcpp中的NA_LOGICAL有清晰的认识?谢谢!

EN

Stack Overflow用户

发布于 2018-01-13 08:43:59

目前的现状无意中导致缺失值通过所有检查传播,因为NA值具有“传染性”,因为存在特殊的数据类型。这种运行时错误在很大程度上是由于比较的顺序不正确。

具体地说,不是做:

代码语言:javascript
运行
复制
is_na(all(y == NA_LOGICAL))

顺序应该是:

代码语言:javascript
运行
复制
all(is_na(y))

本质上,您希望首先测试这些值是否为NA,然后检查是否所有值都为TRUE

关于使用all()的最后一点注意事项是,有一个特殊的模板,它要求成员函数访问最终结果,以便将其强制转换为bool。因此,我们需要添加.is_true().is_false()。有关更多信息,请参阅关于缺失值的unofficial Rcpp API部分。

固定代码

代码语言:javascript
运行
复制
#include <Rcpp.h>
using namespace Rcpp;

// [[Rcpp::plugins("cpp11")]]

// [[Rcpp::export]]
bool is_na_corrected() {

  LogicalVector y = {TRUE,FALSE};
  bool x = all(is_na(y)).is_true();

  return x;
}


/***R
is_na_corrected()
*/

结果

代码语言:javascript
运行
复制
is_na_corrected()
# [1] FALSE
票数 3
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48231661

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档