Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 函数中缺少()的替代方法_R - Fatal编程技术网

R 函数中缺少()的替代方法

R 函数中缺少()的替代方法,r,R,我想在不调用missing()函数的情况下检测函数中是否缺少变量。我已经找到了两种选择,但它们看起来都很粗糙 备选案文1 似乎缺少的变量具有Environment类“name”,但直觉上使用此构造似乎是错误的: a <- function(a, b){ e <- environment() if(class(e[["b"]]) == "name") e$b <- a print(b) } 背景 我需要这个,因为我正在更改API,我想循环使用…中的所有旧参

我想在不调用
missing()
函数的情况下检测函数中是否缺少变量。我已经找到了两种选择,但它们看起来都很粗糙

备选案文1 似乎缺少的变量具有Environment类“name”,但直觉上使用此构造似乎是错误的:

a <- function(a, b){
  e <- environment()
  if(class(e[["b"]]) == "name")
    e$b <- a

  print(b)
}
背景 我需要这个,因为我正在更改API,我想循环使用
中的所有旧参数名称,并发送一条警告,提示用户应更新为新参数名称。这就是为什么
missing()
不起作用的原因,我当前的设置是:

# Warnings due to interface changes in 1.0
API_changes <-
  c(rowname = "rnames",
    headings = "header",
    halign = "align.header")
dots <- list(...)
fenv <- environment()
for (i in 1:length(API_changes)){
  old_name <- names(API_changes)[i]
  new_name <- API_changes[i]
  if (old_name %in% names(dots)){
    if (class(fenv[[new_name]]) == "name"){
      fenv[[new_name]] <- dots[[old_name]]
      dots[[old_name]] <- NULL
      warning("Deprecated: '", old_name, "'",
              " argument is now '", new_name ,"'",
              " as of ver. 1.0")
    }else{
      stop("You have set both the old parameter name: '", old_name, "'",
           " and the new parameter name: '", new_name, "'.")
    }
  }
}
#由于1.0中的接口更改而产生的警告
API_changesGosh,--我们真的需要为您指出有关
eval(parse())
的相应
fortune
条目吗?
无论如何,在
dots的内容上循环有什么问题?这些内容必须在?这样做怎么样:
myfun因为该函数在标记文档中使用,可能多次,我想让旧参数运行一段时间。如果没有其他原因,,我有大量的文档需要重新制作。但是
rowname
仍然可以使用此代码。@G.Grothendieck我不喜欢这个解决方案,因为我在帮助中有足够的参数,据我所知,我需要从CRAN兼容性解释Rd文件中的所有旧参数。即使使用just
#'@param old_arg Deprecated see new_arg
,它似乎也没有那么友好。只需在说明中说
Deprecated
。谢谢您的回答。我希望有一个更柔和的过渡,同时避免在文档中有大量的旧参数。由于其他原因,我有了
,我想我会在过渡期使用它。正如您所注意到的,当前的解决方案不是时间猪-我很好奇它
class(e[[n]])==“name”
是否是识别未计算参数的环境变量的正确方法。
# Warnings due to interface changes in 1.0
API_changes <-
  c(rowname = "rnames",
    headings = "header",
    halign = "align.header")
dots <- list(...)
fenv <- environment()
for (i in 1:length(API_changes)){
  old_name <- names(API_changes)[i]
  new_name <- API_changes[i]
  if (old_name %in% names(dots)){
    if (class(fenv[[new_name]]) == "name"){
      fenv[[new_name]] <- dots[[old_name]]
      dots[[old_name]] <- NULL
      warning("Deprecated: '", old_name, "'",
              " argument is now '", new_name ,"'",
              " as of ver. 1.0")
    }else{
      stop("You have set both the old parameter name: '", old_name, "'",
           " and the new parameter name: '", new_name, "'.")
    }
  }
}