2017-01-27 2 views
1

목록 목록에서 만든 행렬을 조작하는 데 문제가 있습니다. 결과 행렬이 왜 정상 행렬처럼 작동하지 않는지 나는 정말로 이해하지 못합니다. 즉, 벡터를 반환하기 위해 열을 부분 집합하면 대신 목록이 생깁니다. 다음은 작동 예제입니다.목록 목록에서 만든 행 집합 하위 집합

x = list() 
x[[1]] = list(1, 2, 3) 
x[[2]] = list(4, 5, 6) 
x[[3]] = list(7, 8, 9) 

y = do.call(rbind, x) 
y 
    [,1] [,2] [,3] 
[1,] 1 2 3 
[2,] 4 5 6 
[3,] 7 8 9 

y이 예상되는 형식입니다. 궁극적으로 나는 평균을 내고자하는 행렬의 목록을 갖게 될 것이지만,이 행렬을 부분 집합으로 만들면 벡터 대신 목록을 얻는다는 사실 때문에 오류가 계속 발생합니다.

y[,1] 
[[1]] 
[1] 1 

[[2]] 
[1] 4 

[[3]] 
[1] 7 

왜 이런 일이 벌어지고 있는지 알고 있습니까? b) 어떻게이 문제를 피하거나 해결할 수 있습니까?

미리 감사드립니다.

답변

1

이것은 "매트릭스 목록"의 또 다른 문제점입니다. 당신은 어떤 배경 독서를해야하는 경우

matrix(unlist(x), nrow = length(x), byrow = TRUE) 

은 다음을 참조하십시오 : Why a row of my matrix is a list 당신은

do.call(rbind, lapply(x, unlist)) 

또는 간단 필요합니다. 그것은 당신보다 더 복잡한 경우입니다.

1

문제는 벡터 목록이 아닌 목록 목록 인 x가 원인 인 것처럼 보입니다. 이것은 위대한 아니지만, 그것은 작동합니다 :

y = do.call(rbind, lapply(x, unlist)) 
+0

목록 목록으로 만든 행렬이 벡터 목록과 다르게 작동하는 이유는 무엇입니까? 내 생각에 매트릭스가되면 매트릭스처럼 작동합니다. 아마도 매트릭스의 하위 유형이 있을까요? – SamPassmore

0

do.call 별도로 각 목록의 인수를 전달합니다, 그래서 당신은 정말 그냥 함께 당신의 세 가지 목록을 결합하고 있습니다. 이것은 요소를 호출 할 때 목록 형식으로 된 이유를 설명합니다.

x를 제거한 다음 sapply를 사용하여 매트릭스를 만듭니다. R은 기본적으로 열을 채우기 때문에, 원하는 행렬을 얻기 위해 열을 바꿔야합니다.

y <- t(sapply(x, unlist))