[R-es] error de incompatible methods

Jorge I Velez
Wed, 04 Jun 2014 12:55:53 -0000

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