2010-07-29 7 views
1

루프에서 df의 변수 이름을 간단히 변경하려고합니다. 루프없이데이터 프레임의 열 이름을 반복하십시오.

, 이것은 완벽하게 작동합니다 : (건조 실행 예제에서 나는 대신에 "1") 루프 친화적 인 방식으로

names(c1) <- c("sales", "month") 

(가) 제대로 이름을 참조하는 다음 (C1) :

assign(names(get(paste("c","1", sep=""))), c("sales", "month")) 
,369 :
names(get(paste("c","1", sep=""))) 

하지만 전체 작업을 쓰기로 나는 "첫 번째 요소는 변수 이름으로 사용"의 조정에 오류가, 여기에 코드입니다

오류의 의미를 모르지만 열 제목이 변경되지 않았습니다.

아이디어가 있으십니까?

감사합니다,

로베르토

+5

근본적인 문제를 게시하지 않는 이유는 무엇입니까? 지금까지 귀하의 질문은 귀하가 해결하려고하는 문제에 대해 부적절한 데이터 구조를 가지고 있음을 시사합니다. – hadley

+0

hadley, 나는 처음부터이 작업을 수행 할 필요가 없도록 원본에서 데이터 구조를 수정하라는 조언을 실제로 따랐습니다. – Roberto

답변

-1

assign 문자열로 변수 이름을 사용합니다. get은 이름이 아닌 변수를 반환합니다.

R 신을 조롱하려는 시도에서 문자열과 문자열 목록을 가져 와서 문자열 목록을 명명 된 데이터 프레임의 이름에 할당하는 함수가 있습니다.

foo <- function(df, lon) { 
    temp <- get(df) 
    names(temp) <- lon 
    assign(df, temp, inherits = TRUE) 
} 

사본이 없으면이를 수행해야합니다.

+0

* Shudder *. 왜 그냥 객체 자체를 전달하지 않습니까? 객체의 이름으로 작업하는 것은 성공을위한 좋은 전략이 아닙니다. – hadley

+0

동의합니다. 질문에 답하기 위해 노력하고 있습니다. – deinst

0

assign 함수의 도움말에 따르면 첫 번째 인수는 변수의 이름이며 문자열로 제공됩니다. 강제 변환은 수행되지 않으며 길이가 1보다 큰 문자 벡터의 첫 번째 요소가 경고와 함께 사용됩니다.

관련 문제