[R-es] error de incompatible methods

daniel
Wed, 04 Jun 2014 13:29:27 -0000

Marta,

No te puedo asegurar que la respuesta que sigue sirva para resolver el
problema, al fin y al cabo no enviaste un ejemplo reproducible para poder
trabajarlo con mayor comodidad y seguridad.

Al leer read.csv(filename, sep=",",header=TRUE) no le dijistes a
read.csv
que considere stringsAsFactors = FALSE por lo que consideró a Time no un
character con la forma "20:02:12", sino un factor.

En un e-mail anterior la estructura de Time lo indicaba como un factor.

Usas la función time de la librería chron. Desconozco si funciona
 DBx$Time>minTime, por lo que dices no y es lógico que así sea ya que
class(DBx$Time) me parece que es un factor y class(minTime) es de clase
times. Quizás si funcione as.character(DBx$Time) > minTime, o mejor
convierte la columan Time a times con chron.

Espero te sirva,

Daniel Merino



El 4 de junio de 2014, 9:55, Jorge I Velez <jorgeivanvelez@gmail.com>
escribió:

> Hola Marta,
>
> A lo mejor en tu sesion anterior tenias un objeto que ahora ya no esta.
> Mi sugerencia es intentar ejecutar el script en una sesion nueva, y luego
> sobre esa sesion a ver que pasa.
>
> Por cierto, para crear subconjuntos de datos (como en tu caso) sugeriria
> utilizar la funcion subset().
>
> Saludos,
> Jorge.-
>
>
>
> 2014-06-04 22:51 GMT+10:00 Marta valdes lopez
<martavaldes85@gmail.com>:
>
> Hola Daniel, si perdona di a responder directamente y no me di cuenta.
>>
>> Ya se donde esta el error, pero queria preguntar si a puede ser que mi
R
>> funcione mal o algo porque esta manhana ejecute mi script y funciono
>> perfectamente y ahora volvi a ejecutarlo y me volvio a dar el mismo
>> problema de ayer , despues de reiniciar y demas el tinnR y el R, no se
si
>> me vacila o es que tengo algo mal en realidad.
>>
>> Despues el error esta en los símbolos o algo com el tiempo
>>
>>  DBfishing<- na.omit(DBx[(DBx$calcSpeed<=speedFishing &
>> DBx$distHb>distHbRule & DBx$Time>minTime &
DBx$Time<=maxTime),])
>>
>> Porque lo ejecute por separado y me funcione pero al poner el tiempo no
me
>> funciona y me sale el warning message, mi pregunta es si com el tiempo
hay
>> que utilizar otros símbolos de < o > diferentes o algo .
>>
>> Pongo el script entero que utilice y funciono hasta donde me dio error:
>>
>>  setwd("C:/Users/Marta/Desktop/DB")
>>   library(chron)
>>   library(xlsx)
>>  filename<-"univerest_50.csv"
>>  DBxy<-read.csv(filename, sep=",",header=TRUE)
>>   DBx<-DBxy
>>
names(DBx)<-c("Boat","DateTime","TimeDiff",
"Latitude", "Longitude",
>> "Course", "Speed", "distNm",
"calcSpeed", "calcCourse", "distHb",
>> "Harbour", "idTrip","vmsAngle",
"calcAngle", "vmsLeg", "calcLeg",
>> "Trip_vmsLeg", "Trip_calcLeg",
"lengthTrip", "lengthTrip_vmsLeg",
>> "lengthTrip_calcLeg","Time", "Date")
>>
>> #Formatting date and time variables
>>   DBx$Date<-strptime(DBx$Date, "%d-%m-%Y")
###Monicap use ;
>> other use  Y
>>   DBx$Year<-as.POSIXlt(DBx$Date)$year+1900
>>
>> DBx$Boat<-gsub("^\\s+|\\s+$", "", DBx$Boat)
>>  #Read file with boat codes and gears
>>   codeBoats<- read.csv("CODES_2002-2010New.csv",
>> sep=",",header=TRUE)            #Laptop
>>   codeBoats$CODIGO<-gsub("^\\s+|\\s+$", "",
codeBoats$CODIGO)
>>  #Assigning a Fishing license based on Boat and Year
>>   DBx$gear<-codeBoats$Lic[match(paste(DBx$Boat,DBx$Year),
>> paste(codeBoats$CODIGO,codeBoats$Year))]
>>     ddd<- DBx[DBx$calcSpeed %in% NA,]
>>     z<-length(ddd$gear)   #idem
>>   z0<-length(DBx$gear)
>>
>>   ######PoleLine analyses / MAY 2013 #######Changes are: harbour with
>> speed
>> rule (<rest)
>>   #Define GEAR HERE based on list above. Analysing BLL boats
>>   DBx <- DBx[DBx$gear %in% c("PoleLine"),]
>>   z1<-length(DBx$gear)
>>   z1
>>   #defining speed and distance limits
>>       speedFishing<-2.0  #less or equal to, in knots    (NEW MAY
2013
>> reduced from 5.3)
>>
>>       speedHarb<-1.0
>>      distHbRule<-3.0    #greater than, in nautical miles nm
>>
>>       speedSteam<-2.0    #greater than, in knots
>>       minTime<-times(c("05:59:59"))        #usual
beginning of fishing
>> operations
>>       maxTime<- times(c("20:59:59"))        #usual
finishing of fishing
>> operations
>>        #Selecting Harbour
>>         DBharbour<- na.omit(DBx[DBx$distHb<=distHbRule &
>> DBx$calcSpeed<=speedHarb,])
>>         DBharbour$State<-"Harbour"   #MONICAP= 10618;
UNIVER1= ; UNIVER2>> ;
>> UNIVEREST= 1028
>>         z2<-length(DBharbour$State)
>>         write.table(DBharbour, file >>
paste("C:/Users/Marta/Desktop/Results/",filename, sep=""),
append = F,
>> quote = F, sep = ",", dec = ".",  row.names = F,
col.names = T)
>>
>>           #Selecting Steaming
>>         DBsteaming<- na.omit(DBx[(DBx$calcSpeed>speedFishing) |
>> (DBx$distHb<=distHbRule & DBx$calcSpeed>speedHarb) |
>> (DBx$calcSpeed<=speedFishing & DBx$distHb>distHbRule),])
>>         DBsteaming$State<- "Steaming" #MONICAP= 88398;
UNIVER1= ; UNIVER2>> ; UNIVEREST= 53748
>>         DBsteaming$Harbour<-""
>>         z4<-length(DBsteaming$State)
>>         ##NEW MAY 2013##BLL", "BLL / HL##MONICAP=45461,
GEAR(NA)=;
>> UNIVER1=116200 ; UNIVER2=200965; UNIVEREST=0
>>         write.table(DBsteaming, file >>
paste("C:/Users/Marta/Desktop/Results/",filename, sep=""),
append = T,
>> quote = F, sep = ",", dec = ".",
>>                   row.names = F, col.names = F)
>>
>>        #Selecting Fishing   #aqui el error
>>         DBfishing<- na.omit(DBx[(DBx$calcSpeed<=speedFishing
&
>> DBx$distHb>distHbRule & DBx$Time>minTime &
DBx$Time<=maxTime),])
>>         DBfishing$State<-"Fishing"  #MONICAP= 43996;
UNIVER1= ; UNIVER2= ;
>> UNIVEREST= 19960
>>         ##NEW MAY 2013##BLL", "BLL / HL##MONICAP=8506,
GEAR(NA)=;
>> UNIVER1=28417 ; UNIVER2=38266; UNIVEREST=0
>>         DBfishing$Harbour<-""
>>         z5<-length(DBfishing$State)
>>         write.table(DBfishing, file >>
paste("C:/Users/Marta/Desktop/Results/",filename, sep=""),
append = T,
>> quote = F, sep = ",", dec = ".",
>>                   row.names = F, col.names = F)
>>
>> Muchas gracias, un saludo
>>
>>
>>
>>
>>
>> El 3 de junio de 2014, 16:45, daniel <daniel319@gmail.com>
escribió:
>>
>> > Marta,
>> >
>> > Primero, responde a la lista, otros pueden ayudarte mejor que yo,
y a
>> > algunos les puede resultar de interés este intercambio.
>> >
>> > Segundo. evidentemente los datos tienen una estructura especial,
por lo
>> > que puedo ver los datos estan en una lista que contiene otras
listas y
>> > data.frame. Alguno de los errores que recibes es por intentar
>> operaciones
>> > sobre datos de distintas clases, y factores. Te sugiero que para
>> entender
>> > mejor que es lo que lograste importar a R apliques str a las
listas o
>> > data.frame que tienes, por ejemplo str(DBx).
>> >
>> > Tercero, reproducible significa que no estoy sentado enfrente de
tu
>> > ordenador sino del mio y para poder ayudarte necesito poder hacer
lo
>> que tu
>> > intentas. Al copiar lo que te parece interesante has dejado afuera
>> parte de
>> > la estructura que resulta necesaria para poder leer los datos, tu
>> ejemplo
>> > me da error cuando lo que espero son datos en una estructura sea
de
>> > data.frame, matriz o lista. Probablemente tu problema es como
lograr de
>> esa
>> > estructura leer los datos que te interesa y luego convertir los de
>> tiempo a
>> > un formato acorde. Si no puedes mandar los datos inventa algunos
>> > manteniendo la estructura que tienes. La recomendación de
>> dput(head(DBx))
>> > no será de mucha ayuda si lo que tienes es una lista. Me parece
recordar
>> > que en tu mensaje anterior leías los datos con read.csv(DBx.csv),
lo
>> cual
>> > me llevó a pensar que tenías un data.frame, pero parece que lo que
>> tienes
>> > es otra cosa. ¿Cómo te aseguras que sea reproducible? sencillo
antes de
>> > enviarlo inicia una sesión de R y copia lo que vas a enviar para
ver si
>> > funciona bien.
>> >
>> > De nuevo, di que quieres hacer con tus datos (ejemplo: ordenarlos
por
>> > fecha, lugar y xxx), que estructura tienen (?str) y a partir de
allí
>> espero
>> > podamos ayudarte.
>> >
>> > Daniel Merino
>> >
>> >
>> >
>> >
>> > El 3 de junio de 2014, 12:00, Marta valdes lopez <
>> martavaldes85@gmail.com>
>> > escribió:
>> >
>> >  Hola Daniel,
>> >>
>> >> Voy a intentar explicarme porque como soy principiante en R
hay cosas
>> que
>> >> ni se muy bien de donde salen.
>> >>
>> >> Aqui esta una parte de lo que me há salido cuando he puesto el
>> >> dput(head(DBx)) (he copiado solo lo que pensaba que podria
interessar
>> para
>> >> explicar lo que quiero)
>> >>
>> >>
>> >> Time = structure(c(1219L,
>> >>     1279L, 1400L, 141L, 201L, 261L), .Label = c("0:00:00
", "0:01:00 ",
>> >>     "0:02:00 ", "0:03:00 ", "0:04:00
", "0:05:00 ", "0:06:00 ",
>> >>     "0:07:00 ", "0:08:00 ", "0:09:00
", "0:10:00 ", "0:11:00 ",
>> >>     "0:12:00 ", "0:13:00 ", "0:14:00
", "0:15:00 ", "0:16:00 ",
>> >>     "0:17:00 ", "0:18:00 ", "0:19:00
", "0:20:00 ", "0:21:00 ",
>> >>     "0:22:00 ", "0:23:00 ", "0:24:00
", "0:25:00 ", "0:26:00 ",
>> >>  class = "factor"), Date = structure(list(
>> >>         sec = c(0, 0, 0, 0, 0, 0), min = c(0L, 0L, 0L, 0L, 0L,
>> >>         0L), hour = c(0L, 0L, 0L, 0L, 0L, 0L), mday = c(11L,
>> >>         11L, 11L, 11L, 11L, 11L), mon = c(4L, 4L, 4L, 4L, 4L,
>> >>         4L), year = c(109L, 109L, 109L, 109L, 109L, 109L),
wday = c(1L,
>> >>         1L, 1L, 1L, 1L, 1L), yday = c(130L, 130L, 130L, 130L,
>> >>         130L, 130L), isdst = c(1L, 1L, 1L, 1L, 1L, 1L), zone
>> c("AZOST",
>> >>         "AZOST", "AZOST",
"AZOST", "AZOST", "AZOST"), gmtoff >>
>> c(NA_integer_,
>> >>         NA_integer_, NA_integer_, NA_integer_, NA_integer_,
NA_integer_
>> >>         )), .Names = c("sec", "min",
"hour", "mday", "mon", "year",
>> >>     "wday", "yday", "isdst",
"zone", "gmtoff"), class = c("POSIXlt",
>> >>     "POSIXt")), Year = c(2009, 2009, 2009, 2009,
2009, 2009),
>> >>     gear = structure(c(8L, 8L, 8L, 8L, 8L, 8L), .Label =
c("BLL",
>> >>     "BLL / HL", "BLL / PLL",
"NotLic", "OUT", "PLL", "PLL /
PoleLine",
>> >>     "PoleLine", "PoleLine / PLL / BLL /
Traps", "Troll"), class >> >> "factor")),
.Names = c("Boat",
>> >> "DateTime", "TimeDiff",
"Latitude", "Longitude", "Course",
"Speed",
>> >> "distNm", "calcSpeed",
"calcCourse", "distHb", "Harbour",
"idTrip",
>> >> "vmsAngle", "calcAngle",
"vmsLeg", "calcLeg", "Trip_vmsLeg",
>> >> "Trip_calcLeg", "lengthTrip",
"lengthTrip_vmsLeg",
>> "lengthTrip_calcLeg",
>> >> "Time", "Date", "Year",
"gear"), row.names = 923:928, class >> >>
"data.frame")
>> >>
>> >> Despues el script que he utilizado para el tiempo y la hora:
>> >>
>> >> DBx$Date<-strptime(DBx$Date, "%d-%m-%Y")
###Monicap use ;
>> >> other use  Y
>> >>   DBx$Year<-as.POSIXlt(DBx$Date)$year+1900
>> >> DBx$Boat<-gsub("^\\s+|\\s+$", "",
DBx$Boat)
>> >>
>> >> Despues he definido mis reglas para definir los diferentes
estados de
>> los
>> >> barcos:
>> >>
>> >> speedFishing<-2.0
>> >>       speedHarb<-1.0
>> >>       distHbRule<-3.0
>> >>      speedSteam<-2.0
>> >>
>> >>       minTime<-times(c("05:59:59"))        #usual
beginning of fishing
>> >> operations
>> >>       maxTime<- times(c("20:59:59"))
#usual finishing of fishing
>> >> operations
>> >>
>> >> Ypor ultimo cuando quiero definir el estado de fishing
haciendo una
>> >> condicional de que ponga fishing cuando una serie de reglas se
>> cumplan, es
>> >> cuando me da el error:
>> >>
>> >> #Selecting Fishing
>> >>         DBfishing<-
na.omit(DBx[(DBx$calcSpeed<=speedFishing &
>> >> DBx$distHb>distHbRule & DBx$Time>minTime &
DBx$Time<=maxTime),])
>> >>
>> >> Y el error:
>> >> Warning messages:
>> >> 1: In `[.data.frame`(DBx, (DBx$calcSpeed <= speedFishing
& DBx$distHb
>> >  :
>> >>   Incompatible methods ("Ops.factor",
"Ops.times") for ">"
>> >> 2: In `[.data.frame`(DBx, (DBx$calcSpeed <= speedFishing
& DBx$distHb
>> >  :
>> >>   Incompatible methods ("Ops.factor",
"Ops.times") for "<="
>> >>
>> >> Espero haberme explicado mejor.. muchas gracias por tu tiempo!
>> >>
>> >> Un saludo
>> >>
>> >>
>> >>
>> >>
>> >>
>> >> El 3 de junio de 2014, 12:48, daniel
<daniel319@gmail.com> escribió:
>> >>
>> >> Marta,
>> >>>
>> >>> No entiendo lo que necesitas, pero aquí algunas cosas que
pueden
>> >>> orientar las consultas, o solucionar el problema:
>> >>>
>> >>> fecha_sys <- Sys.time()
>> >>> str(fecha_sys)
>> >>> strptime(fecha_sys, format="%Y-%m-%d %H:%M:%S")
>> >>> str(strptime(fecha_sys, format="%Y-%m-%d
%H:%M:%S")  )
>> >>> fecha <- format(Sys.time(), "%d-%m-%Y")
>> >>> str(fecha)
>> >>> as.POSIXlt(fecha, format = "%d-%m-%Y")
>> >>> # Si tienes como fecha 03-06-2003 19. Aunque sería mas
simple si es
>> >>> 03-06-2003 19:00:00
>> >>> tu_fecha <- "03-06-2003 19"
>> >>> # quizás te interese explorar el paquete lubridate
>> >>> library(lubridate)
>> >>> hours(1:24)
>> >>>
>> >>> Si lo anterior te sirve bien. Si no te sirve puedes hacer
un ejemplo
>> >>> reproducible tratando de explicar que es lo que quieres,
>> proporcionando un
>> >>> grupo de datos por ejemplo dput(head(DBx)), y con la parte
de tu
>> script que
>> >>> te da problemas.
>> >>>
>> >>> Suerte,
>> >>>
>> >>> Daniel Merino
>> >>>
>> >>>
>> >>>
>> >>> 2014-06-03 8:41 GMT-03:00 Marta valdes lopez
<martavaldes85@gmail.com
>> >:
>> >>>
>> >>>> Hola!!
>> >>>>
>> >>>> Estoy intentando ejecutar un script com horas, al
principio ejecute
>> >>>> estos
>> >>>> comandos
>> >>>>
>> >>>>
>> >>>> DBx$Date<-strptime(DBx$Date, "%d-%m-%Y")
###Monicap use ;
>> >>>> other
>> >>>> use  Y
>> >>>>
>> >>>>  DBx$Year<-as.POSIXlt(DBx$Date)$year+1900
>> >>>>
>> >>>>  if(filename!="monicap_50.csv")
{DBx$Time<-paste(DBx$Time, ":00",
>> >>>> sep="")}
>> >>>>
>> >>>> Pero me daba el error de que mi base de datos tenia
las horas en
>> formato
>> >>>> 00:00:00, entonces me anhadia dos ceros mas, entonces
no ejecute el
>> >>>> ultimo
>> >>>> comando y ahora al ejecutar este comando desp+ues del
anterior:
>> >>>>
>> >>>>  DBfishing<-
na.omit(DBx[(DBx$calcSpeed<=speedFishing &
>> >>>> DBx$distHb>distHbRule & DBx$Time>minTime
& DBx$Time<=maxTime),])
>> >>>>
>> >>>> Me da este error:Warning messages:
>> >>>> 1: In `[.data.frame`(DBx, (DBx$calcSpeed <=
speedFishing &
>> DBx$distHb >
>> >>>>  :
>> >>>>   Incompatible methods ("Ops.factor",
"Ops.times") for ">"
>> >>>> 2: In `[.data.frame`(DBx, (DBx$calcSpeed <=
speedFishing &
>> DBx$distHb >
>> >>>>  :
>> >>>>   Incompatible methods ("Ops.factor",
"Ops.times") for "<="
>> >>>>
>> >>>> Las variables donde estan minTime y MaxTime son estos
comandos:
>> >>>>
>> >>>>  minTime<-times(c("05:59:59"))
#usual beginning of fishing
>> >>>> operations
>> >>>> > maxTime<- times(c("20:59:59"))
#usual finishing of fishing
>> >>>> operations
>> >>>>
>> >>>> Alguien sabes que es lo que estoy haciendo mal? si
necessitais todo
>> el
>> >>>> script lo pongo sin problema.
>> >>>>
>> >>>> Muchas gracias, un saludo
>> >>>>
>> >>>>         [[alternative HTML version deleted]]
>> >>>>
>> >>>> _______________________________________________
>> >>>> R-help-es mailing list
>> >>>> R-help-es@r-project.org
>> >>>> https://stat.ethz.ch/mailman/listinfo/r-help-es
>> >>>>
>> >>>
>> >>>
>> >>>
>> >>> --
>> >>> Daniel
>> >>>
>> >>
>> >>
>> >
>> >
>> > --
>> > Daniel
>> >
>>
>>         [[alternative HTML version deleted]]
>>
>>
>> _______________________________________________
>> R-help-es mailing list
>> R-help-es@r-project.org
>> https://stat.ethz.ch/mailman/listinfo/r-help-es
>>
>>
>


--
Daniel