【问题标题】:accessing individual arguments of a variable list of arguments in R访问R中变量参数列表的单个参数
【发布时间】:2014-12-14 21:51:38
【问题描述】:

我知道您可以拥有一个接收可变数量参数的函数 跟随。假设我将 任何 门课程的年龄、性别和分数传递给一个函数,我如何打印出作为变量参数列表一部分的分数?

myvarfunction = function(id,age,...)
{
    print(id)
    print(age)

    #How do I print out the marks
}

myvarfunction(1,21)

#Assume these are the marks passed(number of courses unknown, so I have a variable number of args)
myvarfunction(1,21,97)
myvarfunction(1,21,97,96)
myvarfunction(1,21,97,96,999)

【问题讨论】:

  • 在其中添加 as.list(...) 以捕获这些参数。
  • @TylerRinker,谢谢,我只使用了 varargs = list(...)。 as.list 只打印第一个参数。但是为什么我不能在函数之外打印可变参数? varargs 仅在函数体(块)内打印
  • @TylerRinker ,对不起,我猜这是一个通用问题,与主题无关。能够使用可变参数 做到这一点
  • 通常,函数内部的print 没有帮助。通常你想在最后return它。您还可以返回一个列表,如:return(list(a=10, b="dog", c=rnorm(10)))print 只是发送到控制台。

标签: r


【解决方案1】:

我建议的两个解决方案:

match_call <- function(...) match.call(expand.dots = FALSE)[["..."]]
eval_alist <- function(...) eval(substitute(alist(...)))

请注意,match_call 将给出一个“点对”列表:

> str(match_call(a = 1, b = 2, 3))
Dotted pair list of 3
 $ a: num 1
 $ b: num 2
 $  : num 3

eval_alist 将给出一个普通的list

> str(eval_alist(a = 1, b = 2, 3))
List of 3
 $ a: num 1
 $ b: num 2
 $  : num 3

unlist 将返回它或者设置为一个向量(如果你愿意的话)

【讨论】:

    【解决方案2】:

    试试

    myvarfunction <- function(id, age, ...){
      obj <- as.list(substitute(list(...)))[-1L]
      print(id)
      print(age)
      invisible(sapply(obj, print))
    }
    
     myvarfunction(1,21)
     #[1] 1
     #[1] 21
    
    myvarfunction(1,21,97,96)
    #[1] 1
    #[1] 21
    #[1] 97
    #[1] 96
    
    myvarfunction(1,21,97,96,999)
    #[1] 1
    #[1] 21
    #[1] 97
    #[1] 96
    #[1] 999
    

    或者按照@Tyler Rinker 的建议

    myvarfunction <- function(id, age, ...){
     obj <- unlist(list(...))
      print(id)
      print(age)
     invisible(sapply(obj, print))
    }
    
    myvarfunction(1,21,97,96,999)
    #[1] 1
    #[1] 21
    #[1] 97
    #[1] 96
    #[1] 999
    

    【讨论】:

    • 这可能是清洁剂吗:unlist(list(...))
    【解决方案3】:

    只需使用list(...)。这会将所有额外的参数放入一个列表中。

    myvarfunction = function(id,age,...)
    {
        print(id)
        print(age)
        print(list(...))
    }
    

    【讨论】:

      猜你喜欢
      • 2017-11-20
      • 2015-06-08
      • 2021-12-17
      • 1970-01-01
      • 2022-01-18
      • 1970-01-01
      • 1970-01-01
      • 2023-03-30
      • 2013-02-18
      相关资源
      最近更新 更多