That won't work because R has special rules for evaluating things in the
function position.  Examples:

*OK*

min(1:2)
"min"(1:2)
f<-min; f(1:2)
do.call(min,list(1:2))
do.call("min",list(1:2))      # do.call converts string->function


*Not OK*

("min")(1:2)              # string in function position is not converted
f<-"min"; f(1:2)       # ditto
f<- c("min","max");  f[1](1:2)  # ditto


What you need to do is make 'f' a list of *function values, *not a vector
of strings:

f<- c(min,max)


and then select the element of f with [[ ]] (select one element), not [ ]
(select sublist):

f[[1]](1:2)


Thus your example becomes

type    <- c(min,max)
n       <- 1:10
for (a in 1:2)    {
print(type[[a]](n)) }

Another (uglier) approach is with do.call:

type    <- c("min","max")
n       <- 1:10
for (a in 1:2)    {
print(do.call(type[a],list(n))) }


Does that help?

             -s

On Tue, Feb 14, 2012 at 14:02, Muhammad Rahiz
<muhammad.ra...@ouce.ox.ac.uk>wrote:

> Hi all,
>
> I'm trying to get the min and max of a sequence of number using a loop
> like the folllowing. Can anyone point me to why it doesn't work.
>
> Thanks.
>
> type    <- c("min","max")
> n       <- 1:10
> for (a in 1:2)    {
> print(type[a](n)) }
>
>
> --
> Muhammad
>
> ______________________________**________________
> R-help@r-project.org mailing list
> https://stat.ethz.ch/mailman/**listinfo/r-help<https://stat.ethz.ch/mailman/listinfo/r-help>
> PLEASE do read the posting guide http://www.R-project.org/**
> posting-guide.html <http://www.R-project.org/posting-guide.html>
> and provide commented, minimal, self-contained, reproducible code.
>

        [[alternative HTML version deleted]]

______________________________________________
R-help@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.

Reply via email to