R 条件具有长度>;1不在Linux上

R 条件具有长度>;1不在Linux上,r,R,我理解为什么会发生这种错误: parse_spec = function(ttype, spec = NA) { ... if (is.na(spec)) { ... } ... } 当等级库可以是一个元素或列表时。因此,我的快速解决方案是: parse_spec = function(ttype, spec = NA) { ... if (length(spec) == 1 && is.na(spec)) { ... } ...

我理解为什么会发生这种错误:

parse_spec = function(ttype, spec = NA) {
  ...
  if (is.na(spec)) {
    ...
  }
  ...
}
当等级库可以是一个元素或列表时。因此,我的快速解决方案是:

parse_spec = function(ttype, spec = NA) {
  ...
  if (length(spec) == 1 && is.na(spec)) {
    ...
  }
  ...
}
但是,只有在我将其发布到winbuilder时才发生错误: 我没有在我的Linux机器上使用R:

R version 3.5.1 (2018-07-02) -- "Feather Spray"
Copyright (C) 2018 The R Foundation for Statistical Computing
Platform: x86_64-pc-linux-gnu (64-bit)

为什么Linux上没有抛出错误?使用NULL作为默认参数是否更好?< /P>不是问题的答案,但请注意,如果<代码>长度(SPEC)> 1 < /代码>,那么使用<代码> &和/代码>可能是个问题,R只考虑向量的第一个元素。对于缺省参数,我在<代码>缺少(SPEC)< /代码>之间(即,没有默认值)。默认值为
NULL
。(对我来说,
NA
的值有时是有意义的,并且与
NULL
的值不同。(我不玩
!missing(spec)和&is.null(spec)
,因为它们往往变得相当循环/混乱。)最近我更倾向于显式默认值
=null
,这样测试总是单一而简单:
is.null(spec)
,不需要防范向量。但是,如果您更喜欢
=NA
,那么您可以随时尝试
任何(is.NA(spec))
,尽管逻辑稍有不同。根据文档(检查
?`&`
),它应该可以正常工作。这可能是个bug,但我没有windows环境可供测试。