2014-10-18 2 views
2

은 가정하자 나는 jsonlite::fromJSON의 래퍼 함수를 ​​작성하지만 simplifyDataFrame=에 대해 서로 다른 기본값을 사용 :충돌을 일으키지 않고 다른 기본값으로 래퍼 함수를 ​​작성하는 방법은 무엇입니까?

read.json <- function(txt, ...) { 
    jsonlite::fromJSON(txt, simplifyDataFrame = FALSE, ...) 
} 

read.json 따라서 다른 기본 매개 변수를 jsonlite::fromJSON의 래퍼 함수이다. 그러나 사용자가 simplifyDataFrame = TRUE을 지정하여 기본값 인 read.json을 대체하면 인수 이름 충돌이 발생합니다.

이름 충돌이 발생할 수없는 매개 변수의 기본값이 다른 래퍼 함수를 ​​작성하는 가장 좋은 방법은 무엇입니까? 당신은, 및 인수의 많은 너무 많은 입력하지 않도록 할 것인지 어떻게 할 건데 그때 당신은을 사용하는 것이 좋습니다 싶다면

read.json <- function(txt, simplifyDataFrame = FALSE, ...) { 
    jsonlite::fromJSON(txt, simplifyDataFrame = simplifyDataFrame, ...) 
} 

: @hrbrmstr처럼

+0

'simpleifyDataFrame = FALSE' (및 원하는 다른 매개 변수)를 사용하여'read.json'을 매개 변수 목록에 정의 할 수 있습니다. 'fromJSON'에는'... '앞에 다섯 개의 명명 된 매개 변수가 있습니다. 함수 정의에있는 것들을 복제 한 다음'... '을 포함하십시오. – hrbrmstr

+0

고마워요 @hrbrmstr! 더 강력한 방법이 있습니까? 내 말은, 래핑 된 함수가 많은 매개 변수를 가지고 있고 앞으로 더 추가 할 수있는 경우 래퍼 함수가 래핑 된 함수에 새 매개 변수가 추가 될 때 래퍼 함수가 따를 필요가 없도록 더 강력한 방법이 있습니까? –

+1

예. 'match.call'을 사용하여 함수의'...'에서 전달 된 매개 변수를 얻고이를 제외하거나 하드 코딩 한 기본값을 변경할 수 있습니다. 주의 :'formals'을 사용하여 타겟 함수의 모든 명명 된 매개 변수를 볼 수도 있습니다. – hrbrmstr

답변

1

은 간단 할 것입니다 제안

library(functional) 
read.json <- Curry(jsonlite::fromJSON, simplifyDataFrame = FALSE) 

Curry는 다음의 코드는 :로 다음 functional 패키지에 의해 제공되는 기능

function (FUN, ...) { 
    .orig = list(...) 
    function(...) do.call(FUN, c(.orig, list(...))) 
} 
,

내가 한 번 여기 https://stackoverflow.com/a/15636912/1201032Curry을 추천 해들리 더 많은 대안을 제공하고, 다음과 같은 코멘트를 만든 :

이 또한 plyr::partial 그리고 ptools, %<<%, %>>%%()%에. 인수의 부분 평가와 게으른 평가가 어떻게 상호 작용하는지 명확하지 않으며 각 패키지는 약간 다른 접근 방식을 취합니다.

이것은 dplyrmagrittr이 작성되기 전이었습니다. 나는 비슷한 기능이 거기에 이식되었다고 상상한다.

+0

[이 게시물에서] 카레도 권장되었습니다 (http://stackoverflow.com/questions/23856089/how-to-pass-some-but-not-all-further-arguments-with/23857006#23857006). 그것은 아주 유용 할 수 있습니다. –