2016-09-23 2 views
1

함수 내부에서 데이터 프레임을 제대로 조작하는 데 문제가 있습니다. 제대로 인덱싱하지 않는다는 것을 알고 있지만이를 수정하는 방법을 알 수는 없습니다.함수 내부에서 데이터 프레임 인덱싱 문제가 발생했습니다.

내가 좋아하는, 내 데이터 프레임 요소의 수준을 변경하려면 :

data <- data.frame(X1=c("a","b","c")) 
levels(data$X1) <- c("x","y","z") 

하지만 내 함수의 같은 내부 할 수없는 것 :

> ex <- function(input,var){ 
+ levels(input$var) <- c("x","y","z") 
+ return(var) 
+ } 
> test <- ex(data,"X1") 
Error in levels(input$var) <- c("x", "y", "z") : 
attempt to set an attribute on NULL 

> ex2 <- function(input,var){ 
+ levels(input[,var]) <- c("x","y","z") 
+ return(var) 
+ } 
> test2 <- ex2(data,"X1") 
> test2 
[1] "X1" 

I을 실제로 출력하지 않으면 실제로는 신경 쓰지 않아요. var 이건 아니건 - 단지 일러스트레이션을 위해 반환했습니다. 필자는 데이터 프레임과 열을 올바르게 참조하여 함수 내부에서 조작 할 수있는 방법을 알고 싶습니다.

+0

은 '전을 <시도 - 기능 (입력, VAR를) {}' – lmkirvan

+0

그게 무슨 해결합니까? – ZachTurn

+0

죄송합니다. 의견을 편집하기 위해 오래 기다렸다가 변경하지 못했습니다. 나는 당신이 당신의 기능에서 올바른 아이템을 돌려주지 않는다는 것을 지적하려고했습니다. – lmkirvan

답변

1

문제가 data$X1 대신 data$var을 찾고 있다는 것이 문제였습니다. 또한 return이있는 경우 data에 다시 할당하려는 경우 열 이름이 아닌 데이터 프레임이어야합니다.

이 문제를 해결하는 여러 가지 쉬운 방법이 있습니다. 여기에 하나입니다 :

ex <- function(input,var){ 
    levels(input[,colnames(test) %in% var]) <- c("x","y","z") 
    return(input) 
    } 


test <- ex(data,"X1") 
test 
+2

당신이'levels (input [[var]]) <-' – akrun

+0

으로 간단하게 만들 수 있다고 생각합니다 [[var]]를 사용하면 완벽하게 작동합니다! 차이점을 설명해 주시겠습니까? – ZachTurn

관련 문제