От новичка до гуру: Курсы программирования на CyberDuff

Как проверить, были ли какие-либо аргументы переданы через (многоточие) в R? Отсутствует () действителен?

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

В настоящее время я использую что-то вроде:

test1 <- function(...) {
   if (missing(...)) TRUE
   else FALSE
}

test1()
## [1] TRUE
test1(something)
## [2] FALSE

Это работает, но ?missing не указывает, так ли это является правильным/действительным.

Если вышеизложенное неверно, то как это сделать? Или может быть есть другие, более быстрые способы? PS. Мне нужна такая проверка для этой проблемы.

31.10.2014


Ответы:


1

Вот альтернатива, которая выдаст ошибку, если вы попытаетесь передать несуществующий объект.

test2 <- function(...) if(length(list(...))) FALSE else TRUE

test2()
#[1] TRUE
test2(something)
#Error in test2(something) : object 'something' not found
test2(1)
#[1] FALSE
01.11.2014

2

Я думаю, что match.call — это то, что вам нужно:

test <- function(...) {match.call(expand.dots = FALSE)}

> test()
test()

> test(x=3,y=2,z=5)
test(... = list(x = 3, y = 2, z = 5))

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

Надеюсь, это поможет!

01.11.2014
  • Если бы в списке аргументов было больше параметров (кроме ...), я должен был бы проверить any(names(match.call(expand.dots=FALSE)[-1]) == "..."), не так ли? :) 01.11.2014
  • Если вы обязательно хотите, чтобы это дало вам ИСТИНА или ЛОЖЬ, тогда да, вышеизложенное отлично работает. Если вы этого не сделаете, то вышеуказанная функция будет работать и с другими параметрами, кроме '...'. Как вы уже знаете, test <- function(k=7,...) {match.call(expand.dots = FALSE)} for test(x=3,y=2,z=5,k=5) возвращает test(k = 5, ... = list(x = 3, y = 2, z = 5)) 01.11.2014

  • 3

    Если это кому-нибудь поможет, я использовал следующую функцию, чтобы получить параметры многоточия для каждой функции (возвращает пустой список или список аргументов):

    get.params <- function (...) {
      params <- list()
    
      if (length(list(...)) && !is.null(...)) 
        params <- unlist(...)
    
      return(params)
    }
    

    за:

    f <- function(t, ...) {
     params <- get.params(...)
     print(paste(params))
    }
    
    25.01.2019
    Новые материалы

    ИИ меняет этику в руководстве
    Связь искусственного интеллекта, лидерства и этики Сострадание, глубокое понимание чужих страданий в сочетании с желанием облегчить их, возвышается как неотъемлемая человеческая добродетель...

    Представляем Narwhal Technologies (Nrwl)
    6 декабря 2016 г. Маунтин-Вью, Калифорния С тех пор, как Виктор Савкин и я (Джефф Кросс) присоединились к команде Angular в Google на заре Angular 1, Angular продемонстрировал феноменальный..

    Путь AWS  — «Изучение машинного обучения — 10 начинающих ИИ и машинного обучения на AWS».
    Универсальный ресурсный центр для изучения искусственного интеллекта и машинного обучения. НОЛЬ или ГЕРОЙ, начните свое путешествие здесь. Получите решения и пройдите обучение у экспертов AWS...

    5 простых концепций Python, ставших сложными
    #заранее извините 1) Переменные x = 4 y = 5 Переменная в Python — это символическое представление объекта. После присвоения некоторого объекта переменной Python мы приобретаем..

    «Освоение вероятности: изучение совместной, предельной, условной вероятности и теоремы Байеса —…
    Виды вероятности: Совместная вероятность Предельная вероятность Условная вероятность Диаграмма Венна в вероятностях: В “Set Theory” мы создаем диаграмму Венна...

    Основы Spring: Bean-компоненты, контейнер и внедрение зависимостей
    Как лего может помочь нашему пониманию Когда мы начинаем использовать Spring, нам бросают много терминов, и может быть трудно понять, что они все означают. Итак, мы разберем основы и будем..

    Отслеживание состояния с течением времени с дифференцированием снимков
    Время от времени что-то происходит и революционизирует часть моего рабочего процесса разработки. Что-то более забавное вместо типичного утомительного и утомительного процесса разработки. В..