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"]
양식을 시도했지만 잘 작동합니다.
무엇이 누락 되었습니까? 왜 다른 행동이 있습니까?
함수에서 adf는 어떻게 정의됩니까? 함수에 대한 인수가 아니며 함수 내부에 adf 정의가 없습니다. –
감사합니다. 내가 찾을 수없는 간단한 오타입니다. 그리고 adf가 내 작업 공간에서 사용 되었기 때문에 오류가 명확하지 않았습니다. 당혹스럽고 시간이 많이 걸립니다. – jch