Hello to everyone. I'm trying to use the %in% to match to vectors in ff format. a<-as.ff(data[,1]) %in% fire$fecha> aff (open) logical length=3653 (3653)[1] [2] [3] [4] [5] [6] [7] [8] [3646] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE : FALSE [3647] [3648] [3649] [3650] [3651] [3652] [3653] FALSE FALSE FALSE FALSE FALSE FALSE FALSE Here you see a part of the data: data[1:20,] (just a sample, data has 3653 obs) fecha juliano altura UTM.E UTM.N 1 1990-07-01 182 15 248500 6239500 2 1990-07-02 183 15 248500 6239500 3 1990-07-03 184 15 248500 6239500 4 1990-07-04 185 15 248500 6239500 5 1990-07-05 186 15 248500 6239500 6 1990-07-06 187 15 248500 6239500 7 1990-07-07 188 15 248500 6239500 8 1990-07-08 189 15 248500 6239500 9 1990-07-09 190 15 248500 6239500 10 1990-07-10 191 15 248500 6239500 11 1990-07-11 192 15 248500 6239500 12 1990-07-12 193 15 248500 6239500 13 1990-07-13 194 15 248500 6239500 14 1990-07-14 195 15 248500 6239500 15 1990-07-15 196 15 248500 6239500 16 1990-07-16 197 15 248500 6239500 17 1990-07-17 198 15 248500 6239500 18 1990-07-18 199 15 248500 6239500 19 1990-07-19 200 15 248500 6239500 20 1990-07-20 201 15 248500 6239500> fire$fecha[1:20,] [1] "1984-11-08" "1984-11-08" "1984-11-09" "1984-11-09" "1984-11-09"[6] "1984-11-10" "1984-11-10" "1984-11-11" "1984-11-11" "1984-11-11" [11] "1984-11-11" "1984-11-11" "1984-11-11" "1984-11-12" "1984-11-12" [16] "1984-11-13" "1984-11-13" "1984-11-13" "1984-11-14" "1984-11-14" to see if a got any match: table.ff(a) FALSE TRUE 1687 1966 Mensajes de aviso perdidosIn if (useNA == "no") c(NA, NaN) : la condición tiene longitud > 1 y sólo el primer elemento será usado in a regular data.frame I use data[a,] to extract the rows that a =TRUE, but when i do this in a ffdf i get this error:> data[a,]Error: vmode(index) == "integer" is not TRUEI'm just learning how to use the ff package so, obviously I'm missing something If any of you knows how to solve this, please teach me. Thank you so much. Lucas. [[alternative HTML version deleted]]
Hi Lucas I don't know the ff package very well but here is what I found. Maybe there is a clue in here> z <- as.Date("1970-01-01")+1:10 > zff <- as.ff(z) > z %in% zff[1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #but> z %in% zff[1:length(zff),][1] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE # and also> z %in% zff[1:10][1] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE That seems to be because an ff object is a list> str(zff)list() - attr(*, "physical")=Class 'ff_pointer' <externalptr> ..- attr(*, "vmode")= chr "double" ..- attr(*, "maxlength")= int 10 ..- attr(*, "pattern")= chr "clone" ..- attr(*, "filename")= chr "/private/var/folders/ub/ubvWLUkKHf8WAywv5rmtcE+++TI/-Tmp-/RtmpmMKHRx/clone406828b135cc.ff" ..- attr(*, "pagesize")= int 65536 ..- attr(*, "finalizer")= chr "close" ..- attr(*, "finonexit")= logi TRUE ..- attr(*, "readonly")= logi FALSE ..- attr(*, "caching")= chr "mmnoflush" - attr(*, "virtual")= list() ..- attr(*, "Length")= int 10 ..- attr(*, "Symmetric")= logi FALSE ..- attr(*, "ramclass")= chr "Date" - attr(*, "class") = chr [1:2] "ff_vector" "ff" If you make a data frame e.g df <- data.frame(date=z,letter=letters[1:10]) # this doesn't work> as.ff(df[1:10,1])%in% zlogical(0) # but this does> as.ff(df[1:10,1]%in% z)ff (open) logical length=10 (10) [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE The question is: In your example, do you want "a" to be a ff object or the first column of data to be an ff object (I could get this to work - propably for the reasons above :> df <- data.frame(date=as.ff(z),letter=letters[1:10])Error in as.data.frame.default(x[[i]], optional = TRUE, stringsAsFactors = stringsAsFactors) : cannot coerce class 'c("ff_vector", "ff")' into a data.frame On 1 October 2012 20:07, Lucas Chaparro <lpchaparrovio at gmail.com> wrote:> Hello to everyone. > I'm trying to use the %in% to match to vectors in ff format. > a<-as.ff(data[,1]) %in% fire$fecha > >> aff (open) logical length=3653 (3653) > [1] [2] [3] [4] [5] [6] [7] [8] [3646] > FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE : FALSE > [3647] [3648] [3649] [3650] [3651] [3652] [3653] > FALSE FALSE FALSE FALSE FALSE FALSE FALSE > > > Here you see a part of the data: > > data[1:20,] (just a sample, data has 3653 obs) > > fecha juliano altura UTM.E UTM.N > 1 1990-07-01 182 15 248500 6239500 > 2 1990-07-02 183 15 248500 6239500 > 3 1990-07-03 184 15 248500 6239500 > 4 1990-07-04 185 15 248500 6239500 > 5 1990-07-05 186 15 248500 6239500 > 6 1990-07-06 187 15 248500 6239500 > 7 1990-07-07 188 15 248500 6239500 > 8 1990-07-08 189 15 248500 6239500 > 9 1990-07-09 190 15 248500 6239500 > 10 1990-07-10 191 15 248500 6239500 > 11 1990-07-11 192 15 248500 6239500 > 12 1990-07-12 193 15 248500 6239500 > 13 1990-07-13 194 15 248500 6239500 > 14 1990-07-14 195 15 248500 6239500 > 15 1990-07-15 196 15 248500 6239500 > 16 1990-07-16 197 15 248500 6239500 > 17 1990-07-17 198 15 248500 6239500 > 18 1990-07-18 199 15 248500 6239500 > 19 1990-07-19 200 15 248500 6239500 > 20 1990-07-20 201 15 248500 6239500 > > >> fire$fecha[1:20,] [1] "1984-11-08" "1984-11-08" "1984-11-09" "1984-11-09" "1984-11-09" > [6] "1984-11-10" "1984-11-10" "1984-11-11" "1984-11-11" "1984-11-11" > [11] "1984-11-11" "1984-11-11" "1984-11-11" "1984-11-12" "1984-11-12" > [16] "1984-11-13" "1984-11-13" "1984-11-13" "1984-11-14" "1984-11-14" > > > to see if a got any match: > > > table.ff(a) > > > FALSE TRUE > 1687 1966 Mensajes de aviso perdidosIn if (useNA == "no") c(NA, NaN) : > la condici?n tiene longitud > 1 y s?lo el primer elemento ser? usado > > > in a regular data.frame I use data[a,] to extract the rows that a => TRUE, but when i do this in a ffdf i get this error: > > >> data[a,]Error: vmode(index) == "integer" is not TRUE > > > I'm just learning how to use the ff package so, obviously I'm missing something > > > If any of you knows how to solve this, please teach me. > > Thank you so much. > > > Lucas. > > [[alternative HTML version deleted]] > > > ______________________________________________ > R-help at r-project.org mailing list > https://stat.ethz.ch/mailman/listinfo/r-help > PLEASE do read the posting guide http://www.R-project.org/posting-guide.html > and provide commented, minimal, self-contained, reproducible code. >-- Christiaan Pauw Nova Institute www.nova.org.za
It doesn't seem possible to index an ff-vector using a logical ff-vector. You can use subset (also in ffbase) or first convert 'a' to a normal logical vector: library(ff) library(ffbase) data1 <- as.ffdf(data.frame(a = letters[1:10], b=1:10)) data2 <- as.ffdf(data.frame(a = letters[5:26], b=5:26)) a <- data1[[1]] %in% data2$a subset(data1, a) data1[a[], ] HTH, Jan Lucas Chaparro <lpchaparrovio at gmail.com> schreef:> Hello to everyone. > I'm trying to use the %in% to match to vectors in ff format. > a<-as.ff(data[,1]) %in% fire$fecha > >> aff (open) logical length=3653 (3653) > [1] [2] [3] [4] [5] [6] [7] [8] [3646] > FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE : FALSE > [3647] [3648] [3649] [3650] [3651] [3652] [3653] > FALSE FALSE FALSE FALSE FALSE FALSE FALSE > > > Here you see a part of the data: > > data[1:20,] (just a sample, data has 3653 obs) > > fecha juliano altura UTM.E UTM.N > 1 1990-07-01 182 15 248500 6239500 > 2 1990-07-02 183 15 248500 6239500 > 3 1990-07-03 184 15 248500 6239500 > 4 1990-07-04 185 15 248500 6239500 > 5 1990-07-05 186 15 248500 6239500 > 6 1990-07-06 187 15 248500 6239500 > 7 1990-07-07 188 15 248500 6239500 > 8 1990-07-08 189 15 248500 6239500 > 9 1990-07-09 190 15 248500 6239500 > 10 1990-07-10 191 15 248500 6239500 > 11 1990-07-11 192 15 248500 6239500 > 12 1990-07-12 193 15 248500 6239500 > 13 1990-07-13 194 15 248500 6239500 > 14 1990-07-14 195 15 248500 6239500 > 15 1990-07-15 196 15 248500 6239500 > 16 1990-07-16 197 15 248500 6239500 > 17 1990-07-17 198 15 248500 6239500 > 18 1990-07-18 199 15 248500 6239500 > 19 1990-07-19 200 15 248500 6239500 > 20 1990-07-20 201 15 248500 6239500 > > >> fire$fecha[1:20,] [1] "1984-11-08" "1984-11-08" "1984-11-09" >> "1984-11-09" "1984-11-09" > [6] "1984-11-10" "1984-11-10" "1984-11-11" "1984-11-11" "1984-11-11" > [11] "1984-11-11" "1984-11-11" "1984-11-11" "1984-11-12" "1984-11-12" > [16] "1984-11-13" "1984-11-13" "1984-11-13" "1984-11-14" "1984-11-14" > > > to see if a got any match: > > > table.ff(a) > > > FALSE TRUE > 1687 1966 Mensajes de aviso perdidosIn if (useNA == "no") c(NA, NaN) : > la condici?n tiene longitud > 1 y s?lo el primer elemento ser? usado > > > in a regular data.frame I use data[a,] to extract the rows that a => TRUE, but when i do this in a ffdf i get this error: > > >> data[a,]Error: vmode(index) == "integer" is not TRUE > > > I'm just learning how to use the ff package so, obviously I'm > missing something > > > If any of you knows how to solve this, please teach me. > > Thank you so much. > > > Lucas. > > [[alternative HTML version deleted]]
Hello, You are trying to index based on a logical ff vector instead of based on a integer ff vector. Indexing based logical ff vectors are only allowed since version 0.6 of the package which is not on CRAN currently yet. Jan -- View this message in context: http://r.789695.n4.nabble.com/ffbase-help-with-in-tp4644730p4645268.html Sent from the R help mailing list archive at Nabble.com.