Как определить, что некоторые аргументы во фрейме данных могут не использоваться? - PullRequest
1 голос
/ 06 мая 2020

У меня есть этот фрейм данных:

df <- data.frame(ref_ws = ref_ws,
                 turb_ws = turb_ws,
                 ref_wd = ref_wd,
                 fcf = turb_ws/ref_ws,
                 ref_fi = ref_fi,
                 shear = shear,
                 turbulence_intensity = turbulence_intensity,
                 inflow = inflow,
                 veer = veer)

, который является частью функции, где я определяю необязательные аргументы (shear, turbulence_intensity, inflow and veer)

trial_plots <- function(ref_ws,turb_ws,ref_wd,shear,turbulence_intensity,inflow,veer)

переменные ref_ws,turb_ws,ref_wd обязательны но остальные не обязательны.

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

Например, если shear не используется, я хочу продолжить и посмотреть, сможет ли он сгенерировать следующий график, касающийся turbulence_intensity и т. Д.

На данный момент это это ошибка:

Error in data.frame(ref_ws = ref_ws, turb_ws = turb_ws,ref_wd = ref_wd,  : 
  argument "veer" is missing, with no default

Как сделать эти аргументы необязательными?

1 Ответ

2 голосов
/ 06 мая 2020

Хэдли рекомендует использовать значение NULL в качестве аргумента по умолчанию и использовать is.null тест в теле функции:

Иногда вы хотите добавить нетривиальное значение по умолчанию, что может занять несколько строки кода для вычисления. Вместо того, чтобы вставлять этот код в определение функции, вы можете использовать missing () для его условного вычисления, если это необходимо. Однако из-за этого трудно понять, какие аргументы требуются, а какие необязательны, без внимательного чтения документации. Вместо этого я обычно устанавливаю значение по умолчанию на NULL и использую is.null (), чтобы проверить, был ли указан аргумент.

From Advanced R book

Я считаю это полезным советом и лично им часто пользуюсь.

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