missing()
함수를 호출하지 않고 변수가 함수 내에 없는지 감지하고 싶습니다. 두 가지 대안을 찾았지만 둘 다 원유처럼 보입니다.함수 내 누락() 대신
대안 1
이없는 변수가 environmnent 클래스 "이름"을 것 같다하지만이 구조를 사용하는 직관적으로 잘못된 것 같다
a <- function(a, b){
e <- environment()
if(class(e[["b"]]) == "name")
e$b <- a
print(b)
}
대안을 2
가능한 해결책은 parse
과 eval
을 사용하는 것이지만 이전 솔루션과 마찬가지로 원유처럼 보일 수 있습니다 :
a <- function(a, b){
e <- environment()
if(eval(parse(text = sprintf("missing(%s)", "b"))))
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, "'.")
}
}
}
이것들이 있어야합니까? 'myfun <- function (rnames = rowname, rowname) {if (! missing (rowname)) .Deprecated ("rnames", old = "rowname"); ...} ' –
마크 다운 문서에서이 함수가 사용 되었기 때문에, 여러 번 나는 오래된 인수를 잠시 동안 유지하고 싶습니다. 다른 이유가 없다면, 내가 다시 제작해야하는 많은 문서가 있습니다. –
하지만'rowname'은이 코드를 사용하여 여전히 작동합니다. –