¿Cómo manejar "el argumento 'incomparables! = FALSO' no se usa (todavía)"?

Quiero verificar si una fila en data.frame() es un duplicado de una fila existente. Como ya se ha señalado aquí una forma podría ser usar la función de duplicado. Sin embargo, si estoy usando la función, aparece el siguiente error:

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

En un correo bastante antiguo, alguien señaló que esto es en realidad un error en R (más información sobre aquí). Mi data.frame() se ve así:

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

Me pregunto cuál es realmente el problema, ya que parece que no hay un valor "NA" en mi marco de datos, ya que

?duplicate

Señala. Esta es quizás una pregunta muy estúpida, pero soy bastante nuevo en R y me encantaría recibir consejos sobre este tema.

Gracias de antemano, miguel

PD: he proporcionado un ejemplo como se sugiere

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);
}

Sin embargo, esto parece no ser un problema con duplicate() en absoluto. Recibo el mismo error si trato de agregar otra fila suspiro.

preguntado el 27 de julio de 12 a las 18:07

¿Puedes dar una muestra de tus datos usando dput y mostrar el código que has probado hasta ahora? -

Como comentario adicional, personalmente no construiría la tabla refiriéndose a una tabla global, usando ->>. El uso de una variable global de este tipo hace que sea más difícil seguir el flujo del programa. Además, si este código se integra con otro código, puede haber efectos secundarios, por ejemplo, si otro código también intenta cambiar la tabla. Además, hacer crecer una tabla de este tipo usando rbind podría ser muuuy lento. -

Bueno, el código no se usará en otro programa R. Sin embargo, me pregunto qué estructura de datos recomienda (con respecto a los problemas de velocidad). -

1 Respuestas

Si reemplazasduplicated funcionar con match_df de plyr, el problema debe ser resuelto.

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);
}

Salida

> 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                  

respondido 21 mar '17, 07:03

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.