2014-11-14 3 views
3

R 함수에서 "self"를 호출하는 우아한 방법이 있는지 궁금합니다. 쉬운 예는 날짜를 수정하는 것입니다. 예를 들어, a가 int 형식으로 된 날짜 (예 : Excel에서 읽는 경우)를 가정 해 봅시다.R 함수에서 "self"를 인수로 사용합니다.

a = 41557 
a = as.Date(a, origin = "1899-12-30") 

그런 다음 "a"가 올바른 형식으로 업데이트됩니다. 분명히이 예제는 매우 간단하지만, 긴 변수 또는 더 복잡한 프로 시저의 컨텍스트에서 "self"와 같은 것을 사용하고자합니다. 이와 같은 것이 R에 있습니다. Self는 단순히 = 기호의 왼쪽 부분에서 변수를 가져 오는 것을 의미합니다. 나는 (내가 생각하는) 일부 기능이 어떻게 든 "< -"을 사용하여 "자기"를 호출 할 수 있음을 발견 첫 번째 힌트로

a = 41557 
a = as.Date(self, origin = "1899-12-30") # what to use for self. 

예를 들어 운영자 :

"minc<-" <- function(x, value){x*value} 

을 제공합니다 :

a = 2 
a = minc(12) 
# a = 24, which is basically : a = self*12 

그런 키워드가 R에 존재하는지 모르겠지만 대부분의 코드 가독성에 도움이 될 것입니다.

항상 도움을 주셔서 감사합니다.

로맹.

+0

내가 따르지 않는 :

다음 명령문은 (magrittr 버전 Github에서에> = 1.1.0,로 사용할 수, devtools::install_github("smbache/magrittr")와) 동일합니다. '자기'란 무엇입니까? 아마 당신은'리콜'을 원할 것입니다. – Thomas

+0

당신은'minc (a) <- 12' – James

+0

@ Thomas로 전화 할 것입니다. 자아는 "= 연산자를 인수로 사용하기 전에 그 객체를 사용하십시오"라고 말하는 방식입니다. – Romain

답변

2

당신은 환상적인 magrittr에서 구현 찾고있는 기능을 꾸러미. CRAN의 버전은 배관 연산자 인 %>%을 소개합니다.이 연산자는 앞에 오는 것을 (기본적으로) 따르는 첫 번째 인수로 사용하거나 앞에 .을 앞의 구문으로 바꿉니다.

Github의 버전은 %<>%을 비롯한 많은 파이프 변형을 소개합니다.이 파이프는 일반 파이프처럼 작동하지만 덮어 쓰기 지정을 포함합니다.

a = as.Date(a, origin = "1899-12-30") 
a = a %>% as.Date(origin = "1899-12-30") 
a %<>% as.Date(., origin = "1899-12-30") 
a %<>% as.Date(origin = "1899-12-30") 
+0

정확히 내가 원했던 것. 감사 ! – Romain

1

보충 함수는 다음과 같이 사용될 수있다 :

1) as.Date

"as.Date<-" <- function(x, value) as.Date(x, origin = value) 

해주기 테스트 :

a <- 41557 
as.Date(a) <- "1899-12-30" 
a 
## [1] 2013-10-10 

2) MINC

"minc<-" <- function(x, value) x * value 
012 3,516,

이제 테스트 :

a <- 2 
minc(a) <- 12 
a 
## [1] 24 

참고 : 당신이 좋아하는 경우에 당신은 x 대신에 self를 사용할 수 있습니다

"as.Date<-" <- function(self, value) as.Date(self, origin = value) 
"minc" <- function(self, value) self * value 
+0

감사합니다. 조금 도움이되었는데 초기 기능을 수정하지 못하게 할만한 것을 찾고있었습니다. 나는 그것이 존재하지 않는다고 생각한다. 내가 주말까지 아무 대답도 얻지 못하면. 나는 당신을 해결책으로 확인하겠습니다. 당신의 도움을 주셔서 감사합니다 ! – Romain

+1

그것은 꽤 좋지는 않지만 다음과 같이 첫번째 인자를 수정하는 함수를 작성할 수있다 :'minc <- function (self, x, env = parent.frame()) assign (deparse (substitute (self) env); a ≤ 2; minc (a, 12); print (a)'. –

관련 문제