Может ли многоточие повторяться в R как * args в Python? - PullRequest
0 голосов
/ 15 января 2019

Новая определенная функция для суммирования входных данных:

mysum=function(...){
return(sum(...))
invisible(...)
}

> mysum(1,2,3,4)
[1] 10

Что если я не использую функцию sum? Я имею в виду:

mysum=function(...){
s=0
for(i in ...){
s=s+i
}
return(s)
}

Это не работает. Можно ли повторить ...?

В Python все просто:

def mysum(*args):
    s=0
    for i in args:
        s+=i
    return(s)

Ответы [ 2 ]

0 голосов
/ 15 января 2019

Да!

Обычный маршрут - поместить его в список и затем выполнить итерацию по списку:

my_fun <- function(...) {
  args <- list(...)
  # do stuff with ellipses args.
}

Используете ли вы lapply, переходите прямо к именованным аргументам или просто зацикливайтесь (for (i in seq_along(args)) {args[[i]]}) - решать только вам.

Если вы предполагаете, что ... содержит только векторы, вы можете сделать:

args <- unlist(list(...))
sum(args)
0 голосов
/ 15 января 2019

используйте c() на многоточии перед циклом и назначьте его внутри функции:

mysum=function(...){
  vec = c(...)
  s=0
  for(i in vec){
    s=s+i
  }
  return(s)
}

mysum(1,2,3)
[1] 6
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...