de error R ya prometer bajo evaluación cuando se utiliza subconjunto de la función, pero ningún error en la escritura

StackOverflow https://stackoverflow.com/questions/3073746

  •  28-09-2019
  •  | 
  •  

Pregunta

Me estoy poniendo un extraño error al ejecutar la siguiente función:

TypeIDs=c(18283,18284,17119,17121,17123,17125,17127,17129,17131,17133,18367,18369,18371,18373,18375,18377,18379)

featsave<-function(featfile,TypeIDs=TypeIDs) {
    mydata1<-read.table(featfile,header=TRUE)
    mydata2<-subset(mydata1,TypeID %in% TypeIDs)

    mydata<-as.data.frame(cast(mydata2, Feat1 + Feat2 + ID ~ TypeID,value="value"))
    save(mydata,file="mydatafile.Rdata",compress=TRUE)
    return(mydata)
}

con los datos siguientes:

Feat1   Feat2   ID  Feat3   Feat4   TypeID  value
1   1   1   6   266 18283   280.00
1   1   1   6   266 18284   20.00
1   1   1   6   266 18285   0.00
1   1   1   6   266 17116   0.00
1   1   1   6   266 17117   0.00
1   1   1   6   266 17118   0.00
1   1   1   6   266 17119   68.75
1   1   1   6   266 17120   0.00
1   1   1   6   266 17121   1.26

El error que consigo es:

Error in inherits(x, "factor") : 
  promise already under evaluation: recursive default argument reference or earlier problems?

Este error se produce en la línea de mydata2 donde tomo un subconjunto de los datos. Me parece que no puede depurar porque si en vez ejecutar cada línea de la función en el intérprete, ya no sale el error. Lo que da?

¿Fue útil?

Solución

¿Es su uso recursivo de TypeIDs. Lo que hay que recordar es que los argumentos de la función son evaluados con pereza, lo que permite cosas interesantes como function(foo, bar = foo). Por desgracia, en esta configuración, el valor predeterminado para TypeIDs a caso en sí provoca una recursividad en la evaluación. Intente cambiar el nombre de ya sea el parámetro o el objeto externo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top