업데이트 할 개체 이름을 동적으로 지정

JeremyC

목록 인 슬롯이있는 S4 클래스를 정의했습니다. 해당 목록에 새 항목을 추가하는 방법 (Genolini의 S4 소개-섹션 10.2)을 작성했습니다.

setClass("MyClass",
         slots = c(entries = "list")
)
a1 <- new("MyClass", entries = list(1))

setGeneric(name="MyAppend",
           def=function(.Object, newEntry)
           {
             standardGeneric("MyAppend")
           }
)


setMethod(f = "MyAppend",
          signature = "MyClass",
          definition = function(.Object, newEntry){
            nameObject <- deparse(substitute(.Object)) 
            newlist <- .Object@entries  
            n  <- newlist %>% length 
            newlist[[n + 1]] <- newEntry  
            .Object@entries  <- newlist
            assign(nameObject, .Object, envir = parent.frame())
            return(invisible)
          }
)

내가 달리면

MyAppend(a1, 2)
a1

나는 얻다

R>a1
An object of class "MyClass"
Slot "entries":
[[1]]
[1] 1

[[2]]
[1] 2

그래야만합니다.

그러나 내 응용 프로그램에서는 동적으로 업데이트 할 개체의 이름을 생성합니다.

ObjectName <- paste0("a", 1)

그런 다음 그 이름을 객체 자체로 바꿀 수 있습니다.

Object <- ObjectName %>% sym %>% eval

그런 다음 str(Object)반환

Formal class 'MyClass' [package ".GlobalEnv"] with 1 slot   
..@ entries:List of 3
   .. ..$ : num 1
   .. ..$ : num 2  

다시 말하지만 그래야만합니다.

하지만 내가 달릴 때

MyAppend(Object, 3)
Object
a1

동안 Object업데이트 a1되지 않았 음 을 보여주는 다음이 표시 됩니다 .

R>Object
An object of class "MyClass"
Slot "entries":
[[1]]
[1] 1

[[2]]
[1] 2

[[3]]
[1] 3


R>
R>a1
An object of class "MyClass"
Slot "entries":
[[1]]
[1] 1

[[2]]
[1] 2

내가 뭘 잘못하고 있니?

앨런 카메론

문제는 다음 줄입니다.

Object <- ObjectName %>% sym %>% eval

당신이 생각하는대로하지 않습니다. 오른쪽은 객체로 평가 a1되므로 수행하는 것과 다르지 않습니다.

Object <- a1

그러나 이것은의 복사본a1생성하고에 대한 참조 나 포인터 또는 동의어를 생성하지 않습니다 a1.

이다 통과하여 (종류의)에 대한 참조를 만들 수 평가되지 않은 당신이 당신의 일반적인 방법에 추가하고자하는 객체의 이름입니다. 당신이 떠날 경우 eval의 일부가 ObjectName %>% sym %>% eval다음 개체를 할당됩니다 이름 a1 에 대한 참조로 전달 될 수 개체를 a1 .

그러나 이것은 새로운 문제를 남깁니다 . MyAppendclass의 객체로 무엇을해야할지 모릅니다 name. 따라서 이름을 처리하는 데 적합한 방법을 작성해야합니다.

setMethod(f = "MyAppend",
          signature = "name",
          definition = function(.Object, newEntry){
             stopifnot(class(eval(.Object)) == "MyClass")
             objname <- as.character(.Object)
             .Object <- eval(.Object)
             .Object@entries <- append(.Object@entries, newEntry)
             assign(as.character(objname), .Object, envir = parent.frame())
          }
)

이제 이것이 어떻게 작동하는지 봅시다 :

a1 <- new("MyClass", entries = list(1))
a1
#> An object of class "MyClass"
#> Slot "entries":
#> [[1]]
#> [1] 1

MyAppend(a1, 2)
a1
#> An object of class "MyClass"
#> Slot "entries":
#> [[1]]
#> [1] 1
#> 
#> [[2]]
#> [1] 2

Object <- paste0("a", 1) %>% sym()

MyAppend(Object, 3)
a1
#> An object of class "MyClass"
#> Slot "entries":
#> [[1]]
#> [1] 1
#> 
#> [[2]]
#> [1] 2
#> 
#> [[3]]
#> [1] 3

나는 이것이 당신이 의도 한 것이라고 생각합니다. 이 워크 플로우를 더 쉽게 만들기 위해 문자열을 디스패치하는 메소드를 고려할 수 있습니다 (문자열로 get전달 된 이름에서 객체를 검색하기 위해 메소드 내부를 사용 합니다).


내가 당신 자신의 기능도 변경했음을 주목하라. return(invisible)이것은 내장 함수의 본문을 반환하기 때문에 하지 말아야 합니다 invisible. return 문을 모두 제외하십시오. 내장 함수 append를 사용하여 메서드를 MyClass좀 더 간단 하게 만들 수도 있습니다 .

 setMethod(f = "MyAppend",
          signature = "MyClass",
          definition = function(.Object, newEntry){
           nameObject <- deparse(substitute(.Object)) 
           .Object@entries <- append(.Object@entries, newEntry)
           assign(nameObject, .Object, envir = parent.frame())
          }
)

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

R에서 동적으로 개체 이름 지정

분류에서Dev

동적으로 생성 된 개체 키가 업데이트되지 않음

분류에서Dev

데이터 프레임을 동적으로 분할 및 이름 지정

분류에서Dev

jQuery를 통해 외부 적으로 입력 필드를 업데이트 할 때 jsRender 객체가 업데이트되지 않음 (이전 버전에서 작동)

분류에서Dev

객체에 속성 이름을 동적으로 할당

분류에서Dev

특정 개체 속성의 수동 업데이트를 어떻게 금지 할 수 있습니까?

분류에서Dev

D3 채워진 게이지-d3 자체를 통해 파일링 서클의 색상을 동적으로 업데이트 할 수 있습니까?

분류에서Dev

루프 카운터를 사용하여 어떻게 동적으로 개체를 만들고 개체 이름을 지정할 때 카운터를 사용할 수 있습니까?

분류에서Dev

배열에서 지속적으로 업데이트 된 (동적) 객체를 정렬하는 방법

분류에서Dev

"각각"을 통해 개체를 만들고 자동으로 이름 지정

분류에서Dev

사용자 지정 이름으로 변수를 만들고 개체 DataFrame 할당

분류에서Dev

마감일까지 svn 체크 아웃 / 최신 개정으로 업데이트

분류에서Dev

Java ArrayList에서 동적으로 객체 이름 지정

분류에서Dev

Google 시트의 간단한 JSON 개체를 기반으로 열 이름을 효율적으로 지정

분류에서Dev

Java / Android에서 자동으로 개체 이름 지정

분류에서Dev

사용자 지정 실행의 결과로 TeamCity 빌드 매개 변수의 값을 영구적으로 업데이트 할 수 있습니까?

분류에서Dev

전체 적 개체를 새 지점으로 이동

분류에서Dev

IntentService에서 속성을 업데이트하는 gridview의 개체를 동적으로 업데이트

분류에서Dev

동적으로 생성 된 범위 개체의 텍스트 업데이트

분류에서Dev

내 개체의 이름을 동적으로 만드는 방법

분류에서Dev

대상 테이블의 이름을 동적으로 지정하는 BigQuery에 작성할 양식이 있나요?

분류에서Dev

Install4j : 업데이트 프로그램이 자체적으로 업데이트 할 수 있습니까?

분류에서Dev

html 속성을 동적으로 추가 할 때 ngx-text-diff가 업데이트되지 않음

분류에서Dev

각도 지시어 속성을 어떻게 동적으로 업데이트 할 수 있습니까?

분류에서Dev

배열로 사용할 수있는 동적 키를 기반으로 json 객체의 값 업데이트

분류에서Dev

데이터 개체를 데이터 프레임으로 변환 할 때 열 이름 지정을 반 자동화하는 사용자 지정 함수를 작성하는 방법

분류에서Dev

동적으로 개체 병합-개체 속성 이름 문제

분류에서Dev

탄력적 검색-특정 중첩 개체 업데이트

분류에서Dev

매개 변수 값을 동적 SQL없이 열 이름으로 설정

Related 관련 기사

  1. 1

    R에서 동적으로 개체 이름 지정

  2. 2

    동적으로 생성 된 개체 키가 업데이트되지 않음

  3. 3

    데이터 프레임을 동적으로 분할 및 이름 지정

  4. 4

    jQuery를 통해 외부 적으로 입력 필드를 업데이트 할 때 jsRender 객체가 업데이트되지 않음 (이전 버전에서 작동)

  5. 5

    객체에 속성 이름을 동적으로 할당

  6. 6

    특정 개체 속성의 수동 업데이트를 어떻게 금지 할 수 있습니까?

  7. 7

    D3 채워진 게이지-d3 자체를 통해 파일링 서클의 색상을 동적으로 업데이트 할 수 있습니까?

  8. 8

    루프 카운터를 사용하여 어떻게 동적으로 개체를 만들고 개체 이름을 지정할 때 카운터를 사용할 수 있습니까?

  9. 9

    배열에서 지속적으로 업데이트 된 (동적) 객체를 정렬하는 방법

  10. 10

    "각각"을 통해 개체를 만들고 자동으로 이름 지정

  11. 11

    사용자 지정 이름으로 변수를 만들고 개체 DataFrame 할당

  12. 12

    마감일까지 svn 체크 아웃 / 최신 개정으로 업데이트

  13. 13

    Java ArrayList에서 동적으로 객체 이름 지정

  14. 14

    Google 시트의 간단한 JSON 개체를 기반으로 열 이름을 효율적으로 지정

  15. 15

    Java / Android에서 자동으로 개체 이름 지정

  16. 16

    사용자 지정 실행의 결과로 TeamCity 빌드 매개 변수의 값을 영구적으로 업데이트 할 수 있습니까?

  17. 17

    전체 적 개체를 새 지점으로 이동

  18. 18

    IntentService에서 속성을 업데이트하는 gridview의 개체를 동적으로 업데이트

  19. 19

    동적으로 생성 된 범위 개체의 텍스트 업데이트

  20. 20

    내 개체의 이름을 동적으로 만드는 방법

  21. 21

    대상 테이블의 이름을 동적으로 지정하는 BigQuery에 작성할 양식이 있나요?

  22. 22

    Install4j : 업데이트 프로그램이 자체적으로 업데이트 할 수 있습니까?

  23. 23

    html 속성을 동적으로 추가 할 때 ngx-text-diff가 업데이트되지 않음

  24. 24

    각도 지시어 속성을 어떻게 동적으로 업데이트 할 수 있습니까?

  25. 25

    배열로 사용할 수있는 동적 키를 기반으로 json 객체의 값 업데이트

  26. 26

    데이터 개체를 데이터 프레임으로 변환 할 때 열 이름 지정을 반 자동화하는 사용자 지정 함수를 작성하는 방법

  27. 27

    동적으로 개체 병합-개체 속성 이름 문제

  28. 28

    탄력적 검색-특정 중첩 개체 업데이트

  29. 29

    매개 변수 값을 동적 SQL없이 열 이름으로 설정

뜨겁다태그

보관