【问题标题】:R function parameters - Can I mandate that one or the other (but not both) be popoulated?R 函数参数 - 我可以强制填充其中一个或另一个(但不能同时填充)吗?
【发布时间】:2019-01-10 19:59:19
【问题描述】:

在 R 中,可以通过指定参数的默认值来设置带有可选参数的函数。例如,如果我的参数是 x 并且 y=0,那么该函数需要 x 的输入。如果给定 y,它将使用 y 的输入,但如果没有给出 y 的值,它将设置 y=0。

有时我至少需要两个参数之一,但如果输入不正确,同时获取这两个参数可能会很危险。

作为我正在考虑的示例,请考虑数据集可能包含“班次”(上午、下午、夜间 - 一个因素)和一天中的时间的列。如果我得到一天中的某个时间,那么我可以计算班次,并且不需要为该参数获取值。如果我将班次作为输入,那么我不需要一天中的时间。我想知道事件发生的大致时间,因此我需要其中一条或另一条信息。不幸的是,当我得到两个输入时,可能存在不匹配 - 输入时间可能是上午 8 点,输入班次可能是下午班次。这是个问题。

有没有办法在函数参数(在函数定义中)中配置这个要求(获取班次或获取时间,但不要同时获取),或者我必须将两者都指定为可选参数并执行函数内的检查(即至少一个或另一个但不是不匹配)?

【问题讨论】:

  • 您不能在函数签名中执行此操作。正如您已经说过的,您必须将两者都指定为可选参数并在函数内进行检查

标签: r function parameter-passing logical-operators xor


【解决方案1】:

不,您不能在函数签名中执行此操作。

您的选择是:

  1. 始终接受两个参数,在提供另一个参数时忽略一个。这种情况并不少见,有时您会在文档页面中看到诸如“如果参数 foo 不是 NULL,则忽略此参数”之类的注释。
  2. 手动检查互斥性,如果两者都提供,则会引发错误或警告。

【讨论】:

  • 选项三:如果你不想要0个参数并且你不想要2个参数,听起来你想要1个参数。给它一个更通用的名称,适当地记录它,并编码你的函数来区分。使用 OP 的示例,调用参数 worktime,如果它是 POSIX 对象,那么它是一天中的某个时间,您可以计算班次。如果它是一个字符串或因子,则按照描述对其进行解析。
猜你喜欢
  • 2010-10-10
  • 1970-01-01
  • 1970-01-01
  • 2012-02-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多