Параметры функции R - Могу ли я сделать так, чтобы один или другой (но не оба) были заполнены? - PullRequest
0 голосов
/ 10 января 2019

В R можно настроить функции с необязательными аргументами, указав значение по умолчанию для аргумента. Например, если мои аргументы x и y = 0, то функция требует ввода для x. Он будет использовать вход для y, если он задан, но установит y = 0, если значение для y не задано.

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

В качестве примера того, о чем я думаю, рассмотрим, что в наборе данных могут быть столбцы для «сдвига» (AM, PM, Night - фактор) и времени суток. Если у меня есть время суток, я могу рассчитать смещение, и получить значение для этого параметра не нужно. Если я получаю сдвиг в качестве входа, то мне не нужно время суток. Я хочу приблизительно узнать, в какое время дня произошло событие, поэтому мне нужна та или иная информация. К сожалению, когда я получаю оба входа, возможно, что есть несоответствие - время ввода может быть 8 утра, а сдвиг входа может быть сдвиг PM. Это проблема.

Есть ли способ настроить это требование (получить сдвиг или получить время, но не получить оба) в параметрах функции (в определении функции), или мне нужно указать оба параметра как необязательные и сделать проверка внутри функции (т. е. хотя бы одно или другое, но не несоответствие)?

1 Ответ

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

Нет, вы не можете сделать это в сигнатуре функции.

Ваши варианты:

  1. Всегда принимайте оба аргумента, игнорируя один, если указан другой. Это не редкость, и иногда вы видите на страницах документации заметки типа «если аргумент foo не NULL, этот аргумент игнорируется».
  2. Вручную проверить взаимную исключительность и выдать ошибку или предупреждение, если оба предоставлены.
...