JD kreyfelt
JD kreyfelt

Reputation: 135

How to extract an element from a list within a function

I am trying to extract an element from a list within a function.

```{r}
Q7.4<-function (v1,v2){
  mean<-mean(v1)
  median<-median(v1)
  variance<-var(v1)
  minimum<-min(v1)
  maximum<-max(v1)
  Coefficientofvariation<-sqrt(variance)/mean
  my.list<<-list(mean=mean,meadian=median,variance=variance,minimum=minimum,maximum=maximum,Coefficientofvariation=Coefficientofvariation)
  my.list$v2
}

When i run the code

Q7.4(1:100,mean)

I get NULL. Why is this happening?

Upvotes: 1

Views: 40

Answers (2)

ThomasIsCoding
ThomasIsCoding

Reputation: 102625

The answer by @akrun is excellent. Here is a complementary one.

We can use eval + substitute to replace my.list$v2 in your code, i.e.,

eval(substitute(v2), my.list)

Upvotes: 0

akrun
akrun

Reputation: 887851

The $ would try to look for a list name v2. Instead, convert the unquoted input to string with substitute/deparse and use [[

Q7.4<-function (v1,v2){
     mean <- mean(v1)
     median <- median(v1)
     variance <- var(v1)
     minimum <- min(v1)
     maximum <- max(v1)
     Coefficientofvariation <- sqrt(variance)/mean
     my.list <- list(mean = mean,
                    median = median,
                    variance = variance,
                    minimum = minimum,
                    maximum = maximum,
                    Coefficientofvariation = Coefficientofvariation)
     my.list[[deparse(substitute(v2))]]
   }

-testing

Q7.4(1:100, mean)
#[1] 50.5

Upvotes: 1

Related Questions