Подтвердить что ты не робот

Получить все параметры в виде списка

Предоставляет ли R объект/функцию/метод/ключевое слово для получения всех аргументов функции?

Используя пример: function(a, b="default", ...) предоставит a и b, а также ... в среде функций. Существует ли утверждение, аналогичное list(...), которое также включало бы a и b в результате?

Или введите еще один способ: сокращение для list(a=a, b=b, ...), учитывая function(a, b, ...)

4b9b3361

Ответ 1

Я думаю, что вы хотите match.call:

tmpfun <- function(a,b,...) {
print(as.list(match.call()))
print(as.list(match.call(expand.dots=FALSE)))
}
> tmpfun(a=1, b=2, c=3, d=4)
[[1]]
tmpfun

$a
[1] 1

$b
[1] 2

$c
[1] 3

$d
[1] 4

[[1]]
tmpfun

$a
[1] 1

$b
[1] 2

$...
$...$c
[1] 3

$...$d
[1] 4

Ответ 2

Одним из решений является использование:

tempf <- function(a, b = 2, ...) {
    argg <- c(as.list(environment()), list(...))
    print(argg)
}
tempf(1, c = 3)
$a
[1] 1

$b
[1] 2

$c
[1] 3

Создает именованный список значений аргументов.

Ответ 3

попробуйте args функцию

Каковы аргументы для функции mean?

> args(mean)
function (x, ...) 
NULL

Как насчет функции lm?

    > args(lm)
function (formula, data, subset, weights, na.action, method = "qr", 
    model = TRUE, x = FALSE, y = FALSE, qr = TRUE, singular.ok = TRUE, 
    contrasts = NULL, offset, ...) 
NULL

Если вы хотите получить список аргументов, попробуйте

as.list(args(lm))

Ответ 4

Я считаю, что вы ищете formals:

formals(sd)
$x


$na.rm
[1] FALSE

И используя dput, вы получите форму, указанную в вопросе:

dput(formals(sd))
list(x = , na.rm = FALSE)

Обратите внимание, что formals не работает для примитивных функций, только замыкания.

Ответ 5

Наткнулся на этот вопрос, ища что-то связанное. Хотя я понимаю, что это уже несколько лет, ответы кажутся неудовлетворительными, и, похоже, не существует какого-либо готового решения вопроса.

Можно сделать (неэлегантное) обходное решение, используя комбинацию функций formals и environment. В приведенном ниже примере извлекаются аргументы из среды с использованием имен, извлеченных из формалей, а затем добавляется список многоточия. Если вы хотите иметь значения, которые были установлены во время вызова функции, установите для параметра orig_values ​​значение TRUE. Функция включает только переменные неявно или явно заданные при вызове функции.

allargs <- function(orig_values = FALSE) {
  # get formals for parent function
  parent_formals <- formals(sys.function(sys.parent(n = 1)))

  # Get names of implied arguments
  fnames <- names(parent_formals)

  # Remove '...' from list of parameter names if it exists
  fnames <- fnames[-which(fnames == '...')]

  # Get currently set values for named variables in the parent frame
  args <- evalq(as.list(environment()), envir = parent.frame())

  # Get the list of variables defined in '...'
  args <- c(args[fnames], evalq(list(...), envir = parent.frame()))


  if(orig_values) {
    # get default values
    defargs <- as.list(parent_formals)
    defargs <- defargs[unlist(lapply(defargs, FUN = function(x) class(x) != "name"))]
    args[names(defargs)] <- defargs
    setargs <- evalq(as.list(match.call())[-1], envir = parent.frame())
    args[names(setargs)] <- setargs
  }
  return(args)
}


tempf <- function(a, b = 2, ...) {
  d <- 5
  b <- 3

  cat("Currently set values defined in call or formals\n")
  print(allargs())
  cat("Values as defined at the time of the call\n")
  print(allargs(T))
}

tempf(1, c = 3)

Currently set values defined in call or formals
$a
[1] 1

$b
[1] 3

$c
[1] 3

Values as defined at the time of the call
$a
[1] 1

$b
[1] 2

$c
[1] 3