programing

R의 목록 목록에 목록 추가

goodcopy 2021. 1. 19. 08:05
반응형

R의 목록 목록에 목록 추가


이미 목록 형식으로 된 목록에 데이터를 추가하는 데 문제가 있습니다. 시뮬레이션 루프 중에 결과 개체를 내보내는 프로그램이 있습니다. 데이터 자체는 행렬 목록으로 저장됩니다. 내 생각은 목록에 목록을 저장 한 다음 나중에 분석하기 위해이 목록 목록을 R 개체로 저장하는 것이지만이를 올바르게 달성하는 데 몇 가지 문제가 있습니다. 시뮬레이션의 행렬 데이터 대신 값을 사용하여 작은 추상 예제로 수행 한 작업을 보여 드리겠습니다.

시뮬레이션 루프를 3 번 ​​실행했다고 가정 해 보겠습니다. 반복하는 동안 결과 목록은 R 객체로 저장할 하나의 목록 목록으로 수집되어야합니다.

다른 목록을 포함하고 저장할 목록 : outlist1 <- list()

첫 번째 반복 : resultsa <- list(1,2,3,4,5)

outlist <- append(outlist1,resultsa)

두 번째 반복 : resultsb <- list(6,7,8,9,10)

outlist <- append(outlist1,b)

세 번째 반복 : resultsc <- list(11,12,13,14,15)

outlist <- list(outlist2,c)

그러나이 솔루션은 이러한 방식으로 목록을 포함하는 목록을 늘리는 데 작동하지 않습니다. 원하는 결과는 다음과 같습니다.

>outlist
[[1]]
[[1]][[1]]
[1] 1

[[1]][[2]]
[1] 2

[[1]][[3]]
[1] 3

[[1]][[4]]
[1] 4

[[1]][[5]]
[1] 5


[[2]]
[[2]][[1]]
[1] 6

[[2]][[2]]
[1] 7

[[2]][[3]]
[1] 8

[[2]][[4]]
[1] 9

[[2]][[5]]
[1] 10


[[3]]
[[3]][[1]]
[1] 11

[[3]][[2]]
[1] 12

[[3]][[3]]
[1] 13

[[3]][[4]]
[1] 14

[[3]][[5]]
[1] 15

그러나 대신 내가 얻는 것은 다음과 같습니다.

> outlist3
[[1]]
[[1]][[1]]
[[1]][[1]][[1]]
[1] 1

[[1]][[1]][[2]]
[1] 2

[[1]][[1]][[3]]
[1] 3

[[1]][[1]][[4]]
[1] 4

[[1]][[1]][[5]]
[1] 5


[[1]][[2]]
[[1]][[2]][[1]]
[1] 6

[[1]][[2]][[2]]
[1] 7

[[1]][[2]][[3]]
[1] 8

[[1]][[2]][[4]]
[1] 9

[[1]][[2]][[5]]
[1] 10

형식이 지정된 결과 목록이 원하는 결과와 같도록 목록을 늘리려면 어떻게해야합니까? 이 목록에 대한 추가 분석을 수행하려면 요소에 쉽게 액세스 할 수 있어야합니다.


이것이 당신이 원하는 것이 될 수 있습니까?

# Initial list:
myList <- list()

# Now the new experiments
for(i in 1:3){
  myList[[length(myList)+1]] <- list(sample(1:3))
}

myList

outlist <- list(resultsa)
outlist[2] <- list(resultsb)
outlist[3] <- list(resultsc)

append의 도움말 파일에 벡터 용이라고 나와 있습니다. 그러나 여기에서 사용할 수 있습니다. 나는 전에 그것을 시도했다고 생각했지만 OP의 코드에 나를 오도 할 수있는 이상한 이상이 있었다.

outlist <- list(resultsa)
outlist <- append(outlist,list(resultsb))
outlist <- append(outlist,list(resultsc))

같은 결과.


목록의 끝을 지나서 인덱스에 할당하는 것과 관련된 두 가지 다른 솔루션이 있습니다. 다음은 append.

resultsa <- list(1,2,3,4,5)
resultsb <- list(6,7,8,9,10)
resultsc <- list(11,12,13,14,15)

outlist <- list(resultsa)
outlist <- append(outlist, list(resultsb))
outlist <- append(outlist, list(resultsc))

요청한 형식을 제공합니다.

> str(outlist)
List of 3
 $ :List of 5
  ..$ : num 1
  ..$ : num 2
  ..$ : num 3
  ..$ : num 4
  ..$ : num 5
 $ :List of 5
  ..$ : num 6
  ..$ : num 7
  ..$ : num 8
  ..$ : num 9
  ..$ : num 10
 $ :List of 5
  ..$ : num 11
  ..$ : num 12
  ..$ : num 13
  ..$ : num 14
  ..$ : num 15

이 답변은 받아 들여지는 답변과 유사하지만 약간 덜 복잡합니다.

L<-list()
for (i in 1:3) {
L<-c(L, list(list(sample(1:3))))
}

변수에 목록 할당을 먼저 둠으로써

myVar <- list()

it opens the possibility of hiearchial assignments by

myVar[[1]] <- list()
myVar[[2]] <- list()

and so on... so now it's possible to do

myVar[[1]][[1]] <- c(...)
myVar[[1]][[2]] <- c(...)

or

myVar[[1]][['subVar']] <- c(...)

and so on

it is also possible to assign directly names (instead of $)

myVar[['nameofsubvar]] <- list()

and then

myVar[['nameofsubvar]][['nameofsubsubvar']] <- c('...')

important to remember is to always use double brackets to make the system work

then to get information is simple

myVar$nameofsubvar$nameofsubsubvar

and so on...

example:

a <-list()
a[['test']] <-list()
a[['test']][['subtest']] <- c(1,2,3)
a
$test
$test$subtest
[1] 1 2 3


a[['test']][['sub2test']] <- c(3,4,5)
a
$test
$test$subtest
[1] 1 2 3

$test$sub2test
[1] 3 4 5

a nice feature of the R language in it's hiearchial definition...

I used it for a complex implementation (with more than two levels) and it works!

ReferenceURL : https://stackoverflow.com/questions/14848172/appending-a-list-to-a-list-of-lists-in-r

반응형