2014-02-28 6 views
4

개체 (데이터 프레임)를 만들지 않고 열의 이름을 바꾸려고합니다. R이 함수를 찾을 수 없습니다.

나는 실행하면 :

names(data.frame(cbind(LETTERS[1:3],1:3)))[1]<-"A" 

내가 얻을 :

Error in names(data.frame(cbind(LETTERS[1:3], 1:3)))[1] <- "A" : could not find function "data.frame<-" 

내가 실행하는 경우 :

X<-data.frame(cbind(LETTERS[1:3],1:3)) 
colnames(X)[1]<-"letters" 
X 

은 내가 데이터 프레임을 만들었 기 때문에 열 이름이 변경 볼 수 있습니다 그리고 그것을 바꿨습니다. 이 두 코드 스 니펫은 객체 생성을 제외하고는 모두 동일합니다. R이이 함수에 유연성이 없는지 알 수 없으며 때로는 객체를 만들어야 만합니다. 그러나 "... 기능을 찾지 못했습니다."라는 오류는 나에게 조금 이상해 보였다. 누군가이 오류를 설명 할 수 있습니까?

답변

15

으로, 먼저 데이터 프레임의 이름을 지정해야 어쩌면 setNames는 당신이 원하는 곳으로가는 길의 일부를 가져옵니다. (피할 수있는 방법이 있지만, 계속 지켜봐주십시오.) 그러나 당신은 이미 그것을 알고 있었고, 이유를 알고 싶었습니다. 여기있어.

대체 기능은 다음과 같습니다. 그것들은 어떤 종류의 조작을 더 단순하게 만드는 일종의 "구문 설탕"입니다. 자세한 내용은이 답변을 참조하십시오 : https://stackoverflow.com/a/11563358/210673.

다음은 대체 함수의 예와 실제로 같은 점입니다.

names(d) <- c("A","B") 
d <- `names<-`(d, c("A","B")) 

따라서 전화가 정말

tmp <- cbind(LETTERS[1:3],1:3) 
data.frame(tmp) <- `names<-`(data.frame(tmp), c("A","B")) 

(단순성에서 cbind에서 결과를 측정)되는 차례로

tmp <- `data.frame<-`(tmp, `names<-`(data.frame(tmp), c("A","B"))) 

를 호출하려고하는데 어떤이 있기 때문에 그것은 실패하지 않습니다 data.frame<- 기능.

names<-의 구문 설탕 버전을 사용하지 않고 원하는 것을 달성 할 수 있지만 대신 할당을 시도하지 않으므로 직접 사용하십시오.

`names<-`(data.frame(tmp), c("A","B")) 
+0

+1 세부 사항에 대한 좋은 설명. – BrodieG

+0

+1. 또한보십시오 : http://stackoverflow.com/questions/10449366/levels-what-sorcery-is-this –

5

첫 번째 명령의 반환 값은 무엇을 기대합니까? 다음을 고려하십시오 :

> (colnames(X)[1]<-"letters") 
[1] "letters" 

이렇게 데이터 프레임 출력을 보려면 다른 명령을 실행해야합니다. 더 나은 아직

> setNames(data.frame(cbind(LETTERS[1:3],1:3)), c("letters")) 
    letters NA 
1  A 1 
2  B 2 
3  C 3 

또는 : 다른 사람이 말했다

> data.frame(letters=LETTERS[1:3], 1:3) 
    letters V2 
1  A 1 
2  B 2 
3  C 3 
관련 문제