我知道你可以拥有一个接收可变数量参数的函数 如下。假设我将任何数量的课程的年龄,性别和标记传递给函数,如何打印出作为变量参数列表一部分的标记?
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)
答案 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(...))
}