Dear Laurent,
I'm going through your code quickly, and the first question I have is whether you loaded the "gmp" library? > library(gmp) Attaching package: ‘gmp’ The following objects are masked from ‘package:base’: %*%, apply, crossprod, matrix, tcrossprod > library(iterators) > iter(1:100, checkFunc = function(n) isprime(n)) $state <environment: 0x7fbead8837f0> $length [1] 100 $checkFunc function (n) isprime(n) $recycle [1] FALSE attr(,"class") [1] "containeriter" "iter" > HTH, Bill. W. Michels, Ph.D. On Sun, May 17, 2020 at 5:43 PM Laurent Rhelp <laurentrh...@free.fr> wrote: > > Dear R-Help List, > > I would like to use an iterator to read a file filtering some > selected lines according to the line name in order to use after a > foreach loop. I wanted to use the checkFunc argument as the following > example found on internet to select only prime numbers : > > | iprime <- ||iter||(1:100, checkFunc = > ||function||(n) ||isprime||(n))| > > |(https://datawookie.netlify.app/blog/2013/11/iterators-in-r/) > <https://datawookie.netlify.app/blog/2013/11/iterators-in-r/>| > > but the checkFunc argument seems not to be available with the function > ireadLines (package iterators). So, I did the code below to solve my > problem but I am sure that I miss something to use iterators with files. > Since I found nothing on the web about ireadLines and the checkFunc > argument, could somebody help me to understand how we have to use > iterator (and foreach loop) on files keeping only selected lines ? > > Thank you very much > Laurent > > Presently here is my code: > > ## mock file to read: test.txt > ## > # Time 0 0.000999 0.001999 0.002998 0.003998 0.004997 > 0.005997 0.006996 0.007996 > # N023 -0.031323 -0.035026 -0.029759 -0.024886 -0.024464 > -0.026816 -0.03369 -0.041067 -0.038747 > # N053 -0.014083 -0.004741 0.001443 -0.010152 -0.012996 > -0.005337 -0.008738 -0.015094 -0.012104 > # N123 -0.019008 -0.013494 -0.01318 -0.029208 -0.032748 > -0.020243 -0.015089 -0.014439 -0.011681 > # N163 -0.054023 -0.049345 -0.037158 -0.04112 -0.044612 > -0.036953 -0.036061 -0.044516 -0.046436 > # N193 -0.022171 -0.022384 -0.022338 -0.023304 -0.022569 > -0.021827 -0.021996 -0.021755 -0.021846 > > > # sensors to keep > > sensors <- c("N053", "N163") > > > library(iterators) > > library(rlist) > > > file_name <- "test.txt" > > con_obj <- file( file_name , "r") > ifile <- ireadLines( con_obj , n = 1 ) > > > ## I do not do a loop for the example > > res <- list() > > r <- get_Lines_iter( ifile , sensors) > res <- list.append( res , r ) > res > r <- get_Lines_iter( ifile , sensors) > res <- list.append( res , r ) > res > r <- get_Lines_iter( ifile , sensors) > do.call("cbind",res) > > ## the function get_Lines_iter to select and process the line > > get_Lines_iter <- function( iter , sensors, sep = '\t', quiet = FALSE){ > ## read the next record in the iterator > r = try( nextElem(iter) ) > while( TRUE ){ > if( class(r) == "try-error") { > return( stop("The iterator is empty") ) > } else { > ## split the read line according to the separator > r_txt <- textConnection(r) > fields <- scan(file = r_txt, what = "character", sep = sep, quiet = > quiet) > ## test if we have to keep the line > if( fields[1] %in% sensors){ > ## data processing for the selected line (for the example > transformation in dataframe) > n <- length(fields) > x <- data.frame( as.numeric(fields[2:n]) ) > names(x) <- fields[1] > ## We return the values > print(paste0("sensor ",fields[1]," ok")) > return( x ) > }else{ > print(paste0("Sensor ", fields[1] ," not selected")) > r = try(nextElem(iter) )} > } > }# end while loop > } > > > > > > > > -- > L'absence de virus dans ce courrier électronique a été vérifiée par le > logiciel antivirus Avast. > https://www.avast.com/antivirus > > [[alternative HTML version deleted]] > > ______________________________________________ > R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see > 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. ______________________________________________ R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see 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.