[R] [solved] scripting/littler: How to call function named iteratively (`f1`, `f2`, …)?

Paul Menzel paulepanter at users.sourceforge.net
Sat Jul 30 14:56:31 CEST 2011


Am Freitag, den 29.07.2011, 15:28 +0200 schrieb Paul Menzel:

> wanting to compare different implementations of a solution I want to
> script it to iterate over the different implementations. Is there a way
> to do this in the R shell/command line?
> 
>         $ more /tmp/iterf.r
>         f1 <- function(n = 100000,
>                        l = 100000)
>         {
>            z = n + l
>         }
>         
>         f2 <- function(n = 100000,
>                        l = 100000)
>         {
>            z = 2 * (n + l)
>         }

[…]

> Going on I tried to script that using the `r` from the package `littler`
> [1]. Unfortunately because of the required quotes "" for the command
> `source()` I am not able to expand the variable.
> 
>         $ for i in $(seq 2); do r -e "print($i)" ; done
>         [1] 1
>         [1] 2
>         $ for i in $(seq 2); do r -e 'source("/tmp/iterf.r"); print(1)' ; done
>         [1] 1
>         [1] 1
>         $ # The next example does not work, because the variable $i does not get expanded when surrounded by ''.
>         $ for i in $(seq 2); do r -e 'source("/tmp/iterf.r"); print(f$i(2, 3))' ; done
>         Fehler in print(f$i(2, 3)) : Objekt 'f' nicht gefunden
>         Ausführung angehalten
>         Fehler in print(f$i(2, 3)) : Objekt 'f' nicht gefunden
>         Ausführung angehalten
> 
> Searching for »iterating function names« with rseek.org did give any
> good results. I also read the appendix in the introduction to R [2], but
> this did not have anything regarding to this either.
> 
> Is there a way to script this?

Searching for »source code« in the R Wiki, I found the Wiki page
scriptingr [3] – which did not turn up in my other searches. As it
turned out you can encode `"` by `\"` in Bash too. So the following
works just fine.

        $ for i in $(seq 2); do r -e "source(\"/tmp/iterf.r\"); print(f$i(2, 3)) )" ; done
        [1] 5
        [1] 10


Thanks,

Paul


> [1] http://packages.debian.org/sid/littler
> [2] http://cran.r-project.org/doc/manuals/R-intro.html#Scripting-with-R
[3] http://rwiki.sciviews.org/doku.php?id=tips:scriptingr
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 198 bytes
Desc: This is a digitally signed message part
URL: <https://stat.ethz.ch/pipermail/r-help/attachments/20110730/6087b480/attachment.bin>


More information about the R-help mailing list