[R] iterators : checkFunc with ireadLines

Laurent Rhelp L@urentRHe|p @end|ng |rom |ree@|r
Fri May 22 13:47:40 CEST 2020


Hi Ivan,
   Endeed, it is a good idea. I am under MSwindows but I can use the 
bash command I use with git. I will see how to do that with the unix 
command lines.


Le 20/05/2020 à 09:46, Ivan Krylov a écrit :
> Hi Laurent,
>
> I am not saying this will work every time and I do recognise that this
> is very different from a more general solution that you had envisioned,
> but if you are on an UNIX-like system or have the relevant utilities
> installed and on the %PATH% on Windows, you can filter the input file
> line-by-line using a pipe and an external program:
>
> On Sun, 17 May 2020 15:52:30 +0200
> Laurent Rhelp <LaurentRHelp using free.fr> wrote:
>
>> # sensors to keep
>> sensors <-  c("N053", "N163")
> # filter on the beginning of the line
> i <- pipe("grep -E '^(N053|N163)' test.txt")
> # or:
> # filter on the beginning of the given column
> # (use $2 for the second column, etc.)
> i <- pipe("awk '($1 ~ \"^(N053|N163)\")' test.txt")
> # or:
> # since your message is full of Unicode non-breaking spaces, I have to
> # bring in heavier machinery to handle those correctly;
> # only this solution manages to match full column values
> # (here you can also use $F[1] for second column and so on)
> i <- pipe("perl -CSD -F'\\s+' -lE \\
>   'print join qq{\\t}, @F if $F[0] =~ /^(N053|N163)$/' \\
>   test.txt
> ")
> lines <- read.table(i) # closes i when done
>
> The downside of this approach is having to shell-escape the command
> lines, which can become complicated, and choosing between use of regular
> expressions and more wordy programs (Unicode whitespace in the input
> doesn't help, either).
>


-- 
L'absence de virus dans ce courrier électronique a été vérifiée par le logiciel antivirus Avast.
https://www.avast.com/antivirus



More information about the R-help mailing list