2014-10-30 5 views
1

lm()이 수식 입력으로 문자열을 받아들이 길 기대했지만 꽤 효과적이지 않습니다. 이 지금까지 작동합니다 :lm이 수식에서 eval을 해석하는 방법

Test<-as.data.frame(matrix(sample(1:100, 12), 4, 3)) 
colnames(Test)<-c("Y", "X1", "X2") 
lm(Y~X1, data=Test) 
XT1<-"X1" 
lm(Y~eval(parse(text=XT1)), data=Test) 

이 올바르게 작동하고 올바른 출력을 생성합니다. 그러나 두 개 이상의 매개 변수가있는 경우 :

lm(Y~X1+X2, data=Test) 
XT2<-"X1+X2" 
lm(Y~eval(parse(text=XT2)), data=Test) 

이렇게해도 동일한 결과가 나오지 않습니다. 배경에 대한

parse(text=XT1) 
parse(text=XT2) 

: 분명히 있기 때문에 문자열이 모두 올바르게 해석하는 이유를 궁금해 결국이 매개 변수의 매트릭스가 제공하는 기능에서 작동해야하며 XT2 문자열을 동적으로 만들 수 있어야 행렬의 colnames, 그래서 1과 (가상의) 무한 사이의 가능한 모든 길이의 XT2와 함께 작동하는 솔루션이 필요합니다.

답변

5

고급 R 사용자가 될 때까지 eval(parse())을 사용하지 마십시오 (일반적으로 필요하지 않습니다). 그냥 as.formula 사용

lm(as.formula(paste0("Y ~ ", XT2)), data=Test) 

주 목표를위한 더 나은 전략이 될 것이라고 : 평가와

lm(Y ~ ., data=Test[, c("Y", "X1", "X2")]) 
2

이 경우, 코드로 x를 문자열을 실행 그래서 ((x)를 구문 분석)을 먼저 X1과 X2를 추가하여 1 개의 변수를 만든 다음 회귀 분석을 실행하십시오.

관련 문제