Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 应用于NA值的Cumany函数_R_Dplyr - Fatal编程技术网

R 应用于NA值的Cumany函数

R 应用于NA值的Cumany函数,r,dplyr,R,Dplyr,我有以下向量: x <- c(FALSE,FALSE,NA,TRUE,FALSE) 输出结果令我惊讶。我希望cumany函数可以如下工作 for(i in 1:length(x)){ print(any(x[1:i])) } [1] FALSE FALSE NA TRUE TRUE 因此,我希望输出如下 for(i in 1:length(x)){ print(any(x[1:i])) } [1] FALSE FALSE NA TRUE TRUE

我有以下向量:

x <- c(FALSE,FALSE,NA,TRUE,FALSE)
输出结果令我惊讶。我希望cumany函数可以如下工作

for(i in 1:length(x)){
  print(any(x[1:i]))
}
[1] FALSE FALSE    NA   TRUE   TRUE
因此,我希望输出如下

for(i in 1:length(x)){
  print(any(x[1:i]))
}
[1] FALSE FALSE    NA   TRUE   TRUE
当涉及到
NA
值时,如何定义
cumany()
函数

更新:


这是以前的
dplyr
版本中的一个错误,已被更正。如果您有相同的问题,只需更新软件包。

一个选项是将
NA
替换为FALSE,执行
cumany
并使用
|
获得原始NA填充位置

cumany(replace(x, is.na(x), FALSE))|x
#[1] FALSE FALSE    NA  TRUE  TRUE

< >回答如何实现的问题,我们需要深入到C++中的实现。 如下所示,向量是用
NAs
初始化的,但是如果在
NAs

out[i] = current || out[i - 1];
关于GitHub上的预期行为有一个简短的介绍

如果您的结果与预期不同,则很有可能需要更新
dplyr

有关更多实现详细信息,请参见以下代码:

LogicalVector cumany(LogicalVector x) {
  int n = x.length();
  LogicalVector out(n, NA_LOGICAL);

  int current = out[0] = x[0];
  if (current == NA_LOGICAL) return out;
  if (current == TRUE) {
    std::fill(out.begin(), out.end(), TRUE);
    return out;
  }
  for (int i = 1; i < n; i++) {
    current = x[i];
    if (current == NA_LOGICAL) break;
    if (current == TRUE) {
      std::fill(out.begin() + i, out.end(), TRUE);
      break;
    }
    out[i] = current || out[i - 1];
  }

  return out;
}
LogicalVector cumany(LogicalVector x){
int n=x.length();
LogicalVector输出(n,NA_逻辑);
int电流=输出[0]=x[0];
if(current==NA_LOGICAL)返回;
如果(当前==真){
std::fill(fill.begin(),out.end(),TRUE);
返回;
}
对于(int i=1;i
要在所有基本R中重写它

Reduce(任意,x,累计=TRUE)|x
#>[1]假假假真

感谢您发布基础代码。但是,我仍然想知道
cumany()
函数的逻辑。无论向量包含多少个
na
,只要有一个
TRUE
any
函数应返回
TRUE
。因此,我还希望从累积
any
函数中,只要在计算的窗口中有一个
TRUE
,就会返回
TRUE
。此外,在dplyr中有关窗口函数的小插曲中,据说
cumany()
|
的累积版本
NA | | TRUE
返回
TRUE
。有趣的是,GitHub上有一个单元测试,它似乎期望基于
NA | | TRUE
的行为。还有一个关于这个主题的简短介绍,得出了相同的结论。我不知道为什么我错过了
out[I]=current | | out[I-1]。我已经仔细检查了它,函数正常工作。尝试更新
dplyr
package,可能就是这种情况。。。抱歉弄错了,我已经更新了答案。