2013-07-14 2 views
3

data.frames 목록에서 열과 행의 이름을 얻는 방법을 알지 못해서 매우 좌절감을 느낍니다. 나는 루프를 사용하지 않기를 원한다. 그래서 나는 단지 lapply를 사용할 수 있다고 생각했습니다. 좋아 처음에는 다음 목록이에서 :이 목록은 훨씬 더 큰lapply가있는 data.frames 목록의 R 이름 colnames 및 rownames

>a 
    $nem.greedyMAP.FALSE.POS 
    X1 X2 X3 X4 X5 X6 X7 X8 X9 X10 
1 NA NA NA NA NA NA NA NA NA NA 
2 NA NA NA NA NA NA NA NA NA NA 
3 NA NA NA NA NA NA NA NA NA NA 
4 NA NA NA NA NA NA NA NA NA NA 
5 NA NA NA NA NA NA NA NA NA NA 
6 NA NA NA NA NA NA NA NA NA NA 
7 NA NA NA NA NA NA NA NA NA NA 
8 NA NA NA NA NA NA NA NA NA NA 
9 NA NA NA NA NA NA NA NA NA NA 
10 NA NA NA NA NA NA NA NA NA NA 

$nem.greedyMAP.FALSE.NEG 
    X1 X2 X3 X4 X5 X6 X7 X8 X9 X10 
1 NA NA NA NA NA NA NA NA NA NA 
2 NA NA NA NA NA NA NA NA NA NA 
3 NA NA NA NA NA NA NA NA NA NA 
4 NA NA NA NA NA NA NA NA NA NA 
5 NA NA NA NA NA NA NA NA NA NA 
6 NA NA NA NA NA NA NA NA NA NA 
7 NA NA NA NA NA NA NA NA NA NA 
8 NA NA NA NA NA NA NA NA NA NA 
9 NA NA NA NA NA NA NA NA NA NA 
10 NA NA NA NA NA NA NA NA NA NA 

물론을, 그렇지 않으면 나는 문제가 가치가있을 wouldnt한다. 그러나 모든 data.frames에 대해 열과 행의 이름을 동일하게 변경하고 싶습니다. 그럼에도 불구하고 사용할 수 있지만 :

lapply(a, function(x) {colnames(x) <- paste("col",1:10,sep="")}) 

하지만 아무 일도 일어나지 않습니다. 어떻게 이럴 수 있겠 어. 아니면 잘못된 길을 lapply입니까?

덕분에

답변

10

당신은 lapply 내부의 객체 x는 원래 개체하지만 사본 아니라는 것을 기억해야합니다. 복사본의 colnames을 변경해도 원래 개체에는 영향을주지 않습니다. 새 이름을 포함하는 개체의 새 복사본을 얻으려면 x을 반환해야합니다. 나는이 경우 setNames을 선호하는 것

new_obj = lapply(a, function(x) { 
    colnames(x) <- paste("col",1:10,sep="") 
    return(x) 
    }) 
+0

덕분에 내 rownames 및 COLNAMES을 수정하는 더 일반적인 솔루션 빠른 대답. 나는 이것을 염두에 두겠다;) –

10

set.seed(1) 
datalist <- list(dat1 = data.frame(A = 1:10, B = rnorm(10)), 
       dat2 = data.frame(C = 100:109, D = rnorm(10)) 
       ) 
lapply(datalist, names) 
## $dat1 
## [1] "A" "B" 

## $dat2 
## [1] "C" "D" 

datalist <- lapply(datalist, setNames, paste0("col", 1:2)) 
lapply(datalist, names) 
## $dat1 
## [1] "col1" "col2" 

## $dat2 
## [1] "col1" "col2" 

편집

에 대한 list

lapply(datalist, "colnames<-", paste0("col", 1:2)) 
lapply(datalist, "rownames<-", letters[1:10]) 
+1

@agstudy이 경우 OP는 단지'colnames'를 수정하기를 원했지만 간단한 one-liners를 사용하여 rownames와 colnames를 수정하는 방법을 추가하기 위해 나의 대답을 편집했다. – dickoa

+0

@agstudy Oups, 나는 그것도 읽었다. 빠른. 대단히 감사합니다. – dickoa