如何处理“参数'无法比较!= FALSE'未使用(还)”?

时间:2012-07-27 17:01:42

标签: r dataframe

我想检查data.frame()中的行是否与现有行重复。正如已经指出here一种方法可能是使用复制函数。但是,如果我使用该功能,我会收到以下错误:

Error: argument 'incomparables != FALSE' is not used (yet)

在一封很旧的邮件中,有人指出这实际上是R中的一个错误(here上的更多信息)。我的data.frame()看起来像这样:

data.frame(val1=int,val2=int,val3=int,val4=float);

我想知道问题究竟是什么,因为我的data.frame中似乎没有“NA”值,因为

?duplicate

指出。这可能是一个非常愚蠢的问题,但我对R很新,并且很乐意提出有关此问题的任何提示!

提前致谢,  迈克尔

P.S。:我提供了一个建议的例子

table <- NULL;

foo <- function(n, d, nh, v){
  newEntry <- data.frame(node_i=n, node_j=nh, dst=d, phi=v);

  if(length(table != 0)){
    if(!duplicated(table, newEntry)){
      add(n, nh, d, v);
    }else{
      print("it is a duplicate!")    
    }
  }else{
    add(n, nh, d, v);
  }
}

add <- function(n, d, nh, v){
  rbind(table, data.frame(node_i=n, node_j=nh, dst=d, phi=v)) ->> table;
}

bar <- function(){
  foo(23,42,5,4.0);
  print(table);
  foo(22,42,5,4.0);  
  print(table);
  foo(23,42,5,4.0);
  print(table);
}

然而,这似乎与duplicate()完全没有问题。如果我尝试添加另一行叹息,我会得到同样的错误。

1 个答案:

答案 0 :(得分:0)

如果您使用duplicated中的match_df替换plyr功能,则应解决此问题。

library(plyr) # for match_df
table <- NULL;

foo <- function(n, d, nh, v){
  newEntry <- data.frame(node_i=n, node_j=nh, dst=d, phi=v);

  if(length(table != 0)){
    if(nrow(plyr::match_df(table, newEntry))){
      add(n, nh, d, v);
    }else{
      print("it is a duplicate!")    
    }
  }else{
    add(n, nh, d, v);
  }
}

add <- function(n, d, nh, v){
  rbind(table, data.frame(node_i=n, node_j=nh, dst=d, phi=v)) ->> table;
}

bar <- function(){
  foo(23,42,5,4.0);
  print(table);
  foo(22,42,5,4.0);  
  print(table);
  foo(23,42,5,4.0);
  print(table);
}

输出

> bar()
node_i node_j dst phi
1     23     42   5   4
Matching on: node_i, node_j, dst, phi
[1] "it is a duplicate!"
node_i node_j dst phi
1     23     42   5   4
Matching on: node_i, node_j, dst, phi
[1] "it is a duplicate!"
node_i node_j dst phi
1     23     42   5   4
> table
node_i node_j dst phi
1     23     42   5   4