내 질문에 올바른 레이블을 붙일 수 있는지 확실하지 않지만 한 번만 제공합니다.R : 생략 부호로 된 인수와 같은 목록 요소를 사용하는 방법?
줄임표 ({})를 사용하는 기능이있는 패키지 (func(...)
)를 사용하고 싶습니다. 클래스 My_Class
의 모든 내 주장은 목록에 있습니다. 저는 많은 논쟁을하고 있으므로 func(arg1, arg2, arg3)
을 피하고 싶습니다. 이상적으로 나는 func(my_list)
을하고 싶습니다. 문제는이 함수가 다음과 같이 표시된다는 것입니다.
function(...) {
cl <- match.call(expand.dots = FALSE)
names <- lapply(cl[[2]],as.character)
ev <- parent.frame()
classes <- unlist(lapply(names,function(name){class(get(name,envir=ev))}))
if(!all(classes == "My_Class")) {
stop("an argument to ... is not a My_Class")
}
}
따라서 목록 전달은 작동하지 않습니다.
func(my_list[[1]], my_list[[2]])
과 func(as.expression(my_list[[1]]))
도 시도했지만 작동하지 않습니다. func
은 인수를 문자로 처리하므로 func(my_list[[1]])
은 chr [1:3] "[[" "my_list" "1"
안에 있고 get(name,envir=ev)
은 충돌합니다. 또한 do.call(func, my_list)
을 시도했지만 my_list
이 평가되면서 다시 충돌합니다. 따라서 name
은 더 이상 character
이 아니지만 My_CLass
이고 다시 get(name,envir=ev)
이 충돌합니다.
내 질문 : 패키지/기본 기능을 변경하지 않고 목록을 작성하려면 어떻게해야합니까? 래퍼 작성에 대해 생각했지만, 심지어 할 수 없기 때문에 붙어 있습니다. func(my_list[[1]])
작업을 할 수 있습니다. 어쩌면 나는 내 문제에 대한 정확한 용어를 놓친 것일 수도있다.
미리 감사드립니다.
빠른 회신을 보내 주셔서 감사합니다. 그러나이 기능을 func() 안에 사용해야합니까? 필자는 함수 (예 : R 패키지)를 변경하지 않고 스크립트를 작성하고 그대로 함수를 사용하려고했습니다. 미안하지만 제대로 이해하지 못했습니다. my_list와 함께 예제 코드는 무엇입니까? – Andarin
사라진 주석에 대한 응답 :'do.call (func, my_list)'는'My_Class' 객체로'func'가 호출되는 결과를 낳습니다. 그러나 테스트가 작성된 방식으로,'my_list'를 문자로 취급하여 작동하지 않는'get (name, envir = ev)'이름으로 객체를 가져옵니다. 예를 들어, 보통 'arg1'이 'My_Class' 객체 인 경우 작동하는'func (arg1)'이 있습니다. 그러면'func'은'get ("arg1", envir = ev)'을 실행합니다. 'arg1 = 1'이라면'do.call (fun, arg1)'은'get ("1", envir = ev)'로 끝난다. – Andarin
@RicardoSaporta, 목록의 항목이 함수의 'parent.frame'에있는 객체로 존재해야하기 때문에 @RicardoSaporta가 작동하지 않습니다. 이 기능은 단지 마음 만 먹는 것입니다. – BrodieG