열 이름에 유효하지 않은 문자가있는 데이터 프레임이 rlm()에서 오류의 원인입니다.rlm()에 잘못된 문자가 발생했습니다
더 자세히 살펴보면 rlm() 내에서 변수 xvars
에 수식의 설명 변수 이름이 포함되어 있지만 문제의 이름 주위에 역 따옴표가 붙는 것으로 나타납니다.
Error in `[.data.frame`(mf, xvars) : undefined columns selected
이 예상 된 동작입니다 : xvars가 데이터 프레임에 인덱스로 사용되는 그런 때, namesly mf[xvars]
다음과 같은 오류가 발생합니다? (나는 이라는 키워드 문구가 문자가 아님을 알고 있습니다.) 같은 모델과 데이터 프레임에서 lm()을 호출하면 문제가 발생하지 않습니다.
# SAMPLE DATA
mydf <- data.frame(matrix(rnorm(36),ncol=6))
colnames(mydf) <- c("y", "x1", "x2", "x1^2", "x2^2", "x1:x2")
rlm(y~., data=mydf) # Error
lm(y~., data=mydf) # No Problem
# Clean up column names
colnames(mydf) <- make.names(colnames(mydf))
rlm(y~., data=mydf) # No Problem
MASS:::rlm.formula
에서 살펴보면, 오류가
다음 줄에 mf[xvars]
에 의해 발생 나타납니다
xlev <- if (length(xvars) > 0L) {
xlev <- lapply(mf[xvars], levels)
xlev[!sapply(xlev, is.null)]
}
역 따옴표가 추가되고 왜 어떤 생각이 있지만이 다음 오류의 원인?
는
정보 추가 나는 RLM() 함수를 복사 dput(mf)
& dput(xvars)
을 추가하고 다음 값을 얻었다. xvars의 값이 위에 지정된 이름과 다릅니다 (즉, 백틱이 추가됨). 또한 mf의 이름은 위에 주어진 이름과 동일합니다.
# dput yielded
mf <- structure(list(y = c(-0.242914027018629, 0.724255425682537, -0.0578467214604185, -0.274193999595702, -0.38985000750839, 0.406046200943395), x1 = c(1.53071709960635, -1.87493297716611, 1.0936519723035, -0.977011182431237, -0.510890461021046, 1.20136627562427), x2 = c(-0.801995963036553, 1.30590232081605, 0.635922235436178, -1.86824341731708, -2.76797814532917, -0.497992681627495), `x1^2` = c(0.914146279518207, 0.103458073891876, -1.29818230391818, -0.629048606358592, 1.71534374557621, 0.922690967521984), `x2^2` = c(-0.0879726513660469, 1.05299413769867, 1.01955640371072, 0.546413685721721, 0.947757793667223, -0.0998700630220064), `x1:x2` = c(-0.757490494166813, 1.31307393014016, 1.90233916482184, 0.68844011701049, -1.28717997826724, -0.581800325341162)), .Names = c("y", "x1", "x2", "x1^2", "x2^2", "x1:x2"), terms = y ~ x1 + x2 + `x1^2` + `x2^2` + `x1:x2`, row.names = c(NA, 6L), class = "data.frame")
xvars <- c("x1", "x2", "`x1^2`", "`x2^2`", "`x1:x2`")
mf[xvars]
# Error in `[.data.frame`(mf, xvars) : undefined columns selected
# Removing the backticks from xvars eliminates the error.
xvars <- sapply(xvars, function(x) gsub("`", "", x))
mf[xvars2] # No Error
왜 R 함수에 버그가 있는지 묻는 질문이 있습니다. – hadley
@hadley 선명도가 부족하여 죄송합니다. 원래이 lm()을 실행하고 rlm()을 실행하려고 할 때 질문 제목이 오도 된 것입니다. 질문은 정말 backticks가 추가되고 있지만 오류가 발생하는 이유입니다. 이것을 약간 정리해 보겠습니다. –
확실한 대답은 수식 연산자 인 목록 이름에 문자를 사용하지 않는 것입니다. 나는 확실히 말할 수는 없지만 이것이 내가 혼란 스럽다는 것을 의심 할 것이다. –