de error R ya prometer bajo evaluación cuando se utiliza subconjunto de la función, pero ningún error en la escritura
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?
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.