2017-03-29 1 views
0

함수에서이 코드를 실행할 때 결과가 달라집니다. 내가 뭘 놓치고 있니? 작동함수 내부 및 외부에서 다른 동작이 발생하는 이유는 무엇입니까?

코드 :

adf$GarageCond = as.character(adf$GarageCond) 
adf[is.na(adf$GarageCond), "GarageCond"] = "None" 
adf$GarageCond = as.factor(adf$GarageCond)  
adf$GarageCond = ordered(adf$GarageCond, levels=c("None","Po","Fa","TA","Gd","Ex")) 

기능 : 나에게 표시되는 내용의

adf$GarageCond = as.character(adf$GarageCond) 
adf[is.na(adf$GarageCond), "GarageCond"] = "None" 
adf$GarageCond = as.factor(adf$GarageCond) 
adf$GarageCond = ordered(adf$GarageCond, levels=c("None","Po","Fa","TA","Gd","Ex")) 

summary(adf$GarageCond) 
None Po Fa TA Gd Ex 
    81 7 35 1326 9 2 

str(adf$GarageCond) 
Ord.factor w/ 6 levels "None"<"Po"<"Fa"<..: 4 4 4 4 4 4 4 4 4 4 ... 

실행이 될 : 코드의

cnvtNaAndOrder = function(df, colname) 
{ 
    # 
    # Change NA's to a "None" factor 
    # 
    df[,eval(quote(colname))] = as.character(df[,eval(quote(colname))]) 
    adf[is.na(df[,eval(quote(colname))]), eval(quote(colname))] = "None" 
    df[,eval(quote(colname))] = as.factor(df[,eval(quote(colname))]) 
    df[,eval(quote(colname))] = ordered(df[,eval(quote(colname))], levels=c("None","Po","Fa","TA","Gd","Ex")) 

    return(df) 
} 

직접 실행은 예상대로 작동 해당 함수를 통해 동일한 코드가 발생하면 경고와 다른 결과가 발생합니다.

adf = cnvtNaAndOrder(adf, "GarageCond") 
Warning message: 
In `[<-.factor`(`*tmp*`, iseq, value = c("None", "None", "None", : 
    invalid factor level, NA generated 

summary(adf$GarageCond) 
None Po Fa TA Gd Ex NA's 
    0 7 35 1326 9 2 81 

str(adf$GarageCond) 
Ord.factor w/ 6 levels "None"<"Po"<"Fa"<..: 4 4 4 4 4 4 4 4 4 4 ... 

as.factor()은 경고이며 "없음"을 요인으로 변환하지 않는 것으로 보입니다. 또한 코드의 직접 실행에서 열을 선택하기 위해 df[,"GarageCond"] 양식을 시도했지만 잘 작동합니다.

무엇이 누락 되었습니까? 왜 다른 행동이 있습니까?

+1

함수에서 adf는 어떻게 정의됩니까? 함수에 대한 인수가 아니며 함수 내부에 adf 정의가 없습니다. –

+0

감사합니다. 내가 찾을 수없는 간단한 오타입니다. 그리고 adf가 내 작업 공간에서 사용 되었기 때문에 오류가 명확하지 않았습니다. 당혹스럽고 시간이 많이 걸립니다. – jch

답변

0

내가 볼 수없는 단순한 오타였습니다.

관련 문제