Nano Hash - криптовалюты, майнинг, программирование

Вызов функции R с аргументами многоточия, сгенерированными во время выполнения (точка-точка-точка / три точки)

Я хочу вызвать функцию R, которая использует аргумент ... (многоточие) для поддержки неопределенного количества аргументов:

f <- function(x, ...) {
  dot.args <- list(...)
  paste(names(dot.args), dot.args, sep = "=", collapse = ", ")
}

Я могу вызвать эту функцию, передав фактические аргументы, предопределенные во время разработки, например. г.:

> f(1, a = 1, b = 2)
[1] "a=1, b=2"

Как я могу передать фактические аргументы для ..., которые я знаю только во время выполнения (например, ввод от пользователя)?

# let's assume the user input was "a = 1" and "b = 2"
# ------
# If the user input was converted into a vector:
> f(1, c(a = 1, b = 2))
[1] "=c(1, 2)"                # wrong result!
# If the user input was converted into a list:
> f(1, list(a = 1, b = 2))
[1] "=list(a = 1, b = 2)"     # wrong result!

Ожидаемый результат динамически сгенерированного вызова f должен быть:

[1] "a=1, b=2"

Я нашел некоторые существующие вопросы о том, как использовать ..., но они не ответили на мой вопрос:

Как использовать функцию многоточия в R при написании собственной функции?

Использование точки / периода в функциях R

Передать ... аргумент другой функции

Могу ли я удалить элемент из ... (точка-точка-точка) и передать его дальше?


  • dot.args <- unlist(list(...)) или dot.args <- c(...) делают то, что вы хотите 18.11.2017
  • @ user2957945 Я не уверен, правильно ли я вас понял. Как я могу позвонить f(), используя dot.args <- unlist(list(...))? 18.11.2017
  • извинения, я неправильно понял. Я предлагал переписать вашу функцию, используя приведенный выше синтаксис. Возможно, вы хотите do.call(f, list(a = 1, b = 2)) - но, возможно, нужна проверка, чтобы увидеть, является ли ввод списком или вектором. 18.11.2017
  • @ user2957945 Strike, это так просто! Пожалуйста, опубликуйте это как ответ! 18.11.2017

Ответы:


1

Вы можете сделать это, передав аргументы функции с помощью do.call. Сначала принудительно вывести список с помощью as.list.

eg

input <- c(a = 1, b = 2)
do.call(f,  as.list(input))

input <- list(a = 1, b = 2)
do.call(f,  as.list(input))
18.11.2017
Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..