2014-03-05 2 views
0

으로 덧붙임 올바른 형식으로 사전을 만들 수없는 문제가 있습니다. 내가 가질 수 있도록 내가 다음 사전에 TSI를 요소를 추가 할중첩 된 사전에 R

mylist[[index]] <- list("TSI" <- list(), "type"=mytype) 

: 나는 예를 들어 내가 가질 수 있도록 최초의 중첩 된 목록 요소에 추가 할

mylist[[index]][["TSI"]] <- list(mylist[[index]][["TSI"]], key=value) 

하지만 난

mylist[[index]][["TSI"]] <- list(mylist[[index]][["TSI"]], '2'=200) 
mylist[[index]][["TSI"]] <- list(mylist[[index]][["TSI"]], '3'=300) 

는 내가이 작업을 수행 할 때, 나는 목록과 내가 하나 개의 값을 포함한다 구축을 위해 노력하고있어 사전/목록을하지 않는 것을 발견이, 즉 일을 계속하는 경우.

내가 루프에있는 다음 시도 대답에 제안으로

:

# type is some kind of string i.e. "3" 
    # myTSI is a value i.e. 400 
    # index is a value i.e. 1 
    mylist[[index]][["TSI"]] <- c(mylist[[index]][["TSI"]], type=myTSI) 

인덱스가이 경우에 변경되지 않습니다,하지만 형, 너무 이상적으로하는 일련의 항목을 구축해야한다 않습니다 mylist[[index]][["TSI"]] 여기서 mylist[[index]][["TSI"]][["6"]]은 해당 유형의 myTSI를 제공합니다. 입력 할 때 그러나 루프를 종료에 따라, 난 그냥 얻을 :

mylist[[index]][["TSI"]] 

을 나는

type 
"648746" 

하지만 사전 목록 다음 얻는다. 내가 할 경우 루프에서 다음 있기 때문에 어떤이, 홀수 :

mylist[[index]][["TSI"]] <- c(mylist[[index]][["TSI"]], "3"=100) 
mylist[[index]][["TSI"]] <- c(mylist[[index]][["TSI"]], "4"=400) 

mylist[[index]][["TSI"]] 인쇄 내가 얻을

3 4 
100 400 

이 경우 이유를 작동 할 수 없습니다.

l = c(l, list(key=value)) 

이 두 개의 목록을 concatinate됩니다

+1

요소는 mylist 복사 방지 이런 식으로

tsi = lapply(some_data, some_function_to_populate_list) mylist[[index]]$TSI = tsi 

하고 중첩 된 목록 때마다 : 가장 좋은 방법은 다음과 같은 라인을 따라입니다 첫 번째 명령에서. 그것은 "TSI"라는 이름의 목록 엔트리를 생성하지 않고 빈리스트를 심볼 "TSI"에 바인드하고 그 빈리스트는 mylist [[index]]의 첫 번째 (이름이없는!) 엔트리가된다. 그런 다음 나중에'mylist [[index]] [[ "TSI"]]'에 접근하려고 시도하면 목록에있는 항목이 존재하지 않으므로'NULL' 객체를 반환합니다. 그러면' 첫 번째 줄에'mylist [[index]] <- list ("TSI"= list(), "type"= "mytype")'를 쓰면 코드가 의도 한대로 작동합니다. – fabians

+2

@ Navonod 두 번 같은 질문을하지 마십시오. 필요한 경우 질문을 편집 할 수 있습니다.이 질문에 대한 답변이 있으니 이전 버전을 닫으 려구요. http://stackoverflow.com/q/22193805/134830 –

+0

@RichieCotton, 다른 하나를 삭제하려고 시도 했어야합니다. 동의했다. 감사. – disruptive

답변

1

당신이 찾고있는 것은 l 유형 목록입니다 같은 구조이다.

R은 copy-on-write 패러다임을 구현하므로 요소를 목록에 점진적으로 추가하는 것은 매우 비효율적입니다. 위의 제안조차도 동일한 문제로 인해 비효율적입니다. `) (목록 - 당신 광고 문제는` "TSI는"<이다

+0

감사합니다. 나는 노력하고있다. 그러나 외관상으로 나는 이것과 문제가있다. 그리고 나는 사전/목록이 추가되지 않는다는 것을 모르고있다. 나는 더 많은 코멘트를 위의 질문에 더 위에 썼다. 그것은 괜찮아 보인다, 내가 하드 타입의 값을 입력 할 때, 나는 append를 얻었지만, 키를위한 변수와 함께 루프를 통과 할 때, value는 작동하지 않는다. – disruptive

+0

@Navonod는 당신이'l = list (a = 1, b = 2)'를 가지고 있다고 가정하면'l = list (l, c = 3)'' 2], c = 3]'즉, 첫 번째 요소의 이름이 지정되지 않은 중첩 목록입니다. 여러분이 바라는 것은'[a = 1, b = 2, c = 3]'입니다. 이것은 연결이고 두 개의 목록으로'c'를 사용함으로써 달성되므로'c = 3' 값을 새 목록에 넣습니다 ''a = 1, b = 2, c = 3 ''이되는'l = c (l, list (c = 3))'를 가져야한다. 이것은 위의 대답에 관한 것입니다. 또는 한 번에 하나의 값만 추가하면 목록에 직접 설정할 수 있습니다.'name = "c"; l [[name]] = 3'. 두 방법 모두 차선책입니다. –

+0

고맙지 만'[[type]] [[name]] = 3' 접근법이 작동하지 않습니다. 이상하게도 N 번 루프를 돌면서도 사전/목록에 밀어 넣은 성만 있습니다. N 개의 다른 '이름'과 값을 얻습니다. 따라서'[[index]] [[type]]'을 출력하면 키 값 쌍을 얻지 못합니다. – disruptive

관련 문제