简体   繁体   English

如何从 function 中的列表中提取元素

[英]How to extract an element from a list within a function

I am trying to extract an element from a list within a function.我正在尝试从 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.我得到 NULL。 Why is this happening?为什么会这样?

The $ would try to look for a list name v2 . $将尝试查找list名称v2 Instead, convert the unquoted input to string with substitute/deparse and use [[相反,使用substitute/deparse将未引用的输入转换为字符串并使用[[

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

The answer by @akrun is excellent. @akrun 的回答非常好。 Here is a complementary one.这是一个补充。

We can use eval + substitute to replace my.list$v2 in your code, ie,我们可以使用eval + substitute来替换代码中的my.list$v2 ,即

eval(substitute(v2), my.list)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM