访问R中变量参数列表的各个参数

时间:2014-12-14 03:21:53

标签: r

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

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)

3 个答案:

答案 0 :(得分:2)

我建议两种解决方案:

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

请注意,match_call会给出一对“点对”&#39;列表:

> 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会将其设置为向量(如果您愿意)

答案 1 :(得分:1)

尝试

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

答案 2 :(得分:1)

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

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