R函数参数-我是否可以要求对其中一个(但不是两个)进行预测?

R函数参数-我是否可以要求对其中一个(但不是两个)进行预测?,r,function,parameter-passing,logical-operators,xor,R,Function,Parameter Passing,Logical Operators,Xor,在R中,可以通过为参数指定默认值来设置具有可选参数的函数。例如,如果我的参数是x且y=0,则函数需要x的输入。如果给定y,它将使用y的输入,但如果没有给定y的值,它将设置y=0 有时我至少需要两个参数中的一个,但如果输入不正确,获取这两个参数可能会很危险 作为我思考的一个例子,考虑数据集可能有“移位”列(AM、PM、夜晚-一个因素)和一天中的时间。如果我得到了一天中的某个时间,那么我就可以计算班次,而获得该参数的值是不必要的。如果我把轮班作为输入,那么我就不需要一天中的时间。我想知道事件发生的大

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

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

作为我思考的一个例子,考虑数据集可能有“移位”列(AM、PM、夜晚-一个因素)和一天中的时间。如果我得到了一天中的某个时间,那么我就可以计算班次,而获得该参数的值是不必要的。如果我把轮班作为输入,那么我就不需要一天中的时间。我想知道事件发生的大致时间,所以我需要一条或另一条信息。不幸的是,当我得到两个输入时,可能存在不匹配-输入时间可能是上午8点,输入移位可能是下午移位。这是个问题


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

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

你的选择是:

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

  • 您不能在函数签名中执行此操作。正如您已经说过的,您必须将这两个参数都指定为可选参数,并在函数选项三中进行检查:如果您不想要0个参数,也不想要2个参数,那么听起来您想要1个参数。给它一个更通用的名称,适当地编写文档,并编写函数代码以区分不同之处。使用OP的示例,调用参数
    worktime
    ,如果它是
    POSIX
    对象,则它是一天中的某个时间,您可以计算班次。如果它是一个字符串或因子,那么按照描述解析它。