2012-01-30 3 views
2

할당 연산자없이 호출 할 수있는 R로 대체 POST 메소드를 초기화하고 싶습니다. 그래서 예를 들면할당하지 않고 R에 메소드 설정

:

내가 setnode(o) <- c("foo", "bar") 같은 뭔가를 호출 할 필요없이 setNode(o)를 호출하고 O를 객체의 슬롯을 대체 할 수 있도록하고 싶습니다. 내가 원하는 이유는 할당의 세부 정보를 알고 있어야하는 사용자가 없기 때문에 (예 : select.list) 여기에 몇 가지 상호 작용이 있기를 원하기 때문입니다.

이것이 가능합니까?

+0

아마 내가 R에서 정말로 원하는 종류의 OO를 사용하지 않고 오히려 클로저를 원한다면, http://www.lemnica.com/esotericR/Introducing-Closures/, 더 자세히 살펴 보겠습니다. –

+0

나를 쫓아 버리는 선을 따라 또 다른 것은 내가 뭔가를 설정할 때 특정 "개인"슬롯을 설정하기를 원한다는 것입니다. 그래서 메서드를 호출하면이 개인 슬롯을 변경하려고 할 수 있습니다. –

+1

또는 R5를 원할 수도 있습니다. https://github.com/hadley/devtools/wiki/R5/bba2424a052f6a9d8bc893a2dfaf9dc178e14ee6 –

답변

2

정말 사용 사례를 이해하지 않지만 ... 구문

같은
o <- setNode(o, c("foo", "bar")) 

당신이 뒤틀림을 통과하지 않는 경우, R의 일반적인 복사에 변화 규칙을 준수하고 o의 슬롯 값을 바꾸는 대신 o 사본을 만드십시오. 교체 방법

node(o) <- c("foo", "bar") 

업데이트 o 자리에 있습니다. 설정에 암시 적으로 사용되기 때문에 setNode 대신 node을 사용합니다. 예를 들어 node<- 객체 구조에 관련된 아무것도 할 필요가 있다고 아무것도, 나는 이것이 당신의 욕망에 관련이 있는지 확실하지 않다

setClass("Node", representation(n="integer", value="character"), 
     prototype=prototype(n=0L)) 
setGeneric("node<-", function(x, ..., value) standardGeneric("node<-")) 
setReplaceMethod("node", "Node", function(x, ..., value) { 
    [email protected] <- [email protected] + 1L 
    [email protected] <- toupper(value) 
    x 
}) 

다음

> o <- new("Node") 
> o 
An object of class "Node" 
Slot "n": 
[1] 0 

Slot "value": 
character(0) 

> node(o) <- c("foo", "bar") 
> o 
An object of class "Node" 
Slot "n": 
[1] 1 

Slot "value": 
[1] "FOO" "BAR" 

"나는이 원하는 없습니다 어떤 상호 작용이되도록 "; 당신은

> do.call("node<-", list(x=o, value=c("foo", "bar"))) 
An object of class "Node" 
Slot "n": 
[1] 2 

Slot "value": 
[1] "FOO" "BAR" 

으로, 더 전화와 같은 구문을 가지고 코드를 작성할 수 있지만,이 node(o) <- ... 다른 아무것도 아니다.

제공되는 인터페이스가 아닌 클래스의 내용에 적합한 참조 클래스를 선택하십시오 (이들은 S4 상단에 빌드되어 있으므로 setOldClass과 같은 S4-isms가 적용됩니다). 예를 들어, 데이터베이스 연결은 참조 클래스에 대해 적합 할 수 있습니다. 이는 상호 작용하는 디스크의 단일 엔티티 만 있기 때문입니다. 대부분, 참조 클래스를 사용하면 R 사용자가 복사 - 복사 - 변경 의미를 혼동하게됩니다.

+0

내가보기에 참조 클래스를 원한다고 생각합니다. 내가이 모든 일을 어떻게 원하게하는지. 하지만 이제는 S4에서 S3를 사용하는 곳에서 조금 더 붙어있는 것처럼 보입니다 - RODBC 객체를 참조 클래스의 필드로 포함시키는 방법에 대해. 그것은 상속 (채널, "RODBC") "개체 '. 자기.'오류를 반환하는 것 같습니다 찾을 수 없음 ' –

+0

나의 이전의 코멘트를 무시하고, 나의 R 세션은 어떻게 든 고발 당했고, 내가 그 방법에 대한 변화를 인식하지 못했다. –

관련 문제