2015-01-13 2 views
3

나는 내 데이터의 서브 세트에 대해 각각의 회귀 분석을 수행하는 회귀 분석을위한 실습 테이블을 작성하려고합니다. 이를 수행하는 자연스러운 방법은 split을 사용하여 데이터에서 data.frames 목록을 만들고 data.frames 목록에서 lapply을 사용하여 lm 개체 목록을 만든 다음 그 목록을 stargazer. 예를 들어,stargazer를 split data.frame을 통해 lapply-ing하는 것에 의해 생성 된 lm 오브젝트의리스트와 함께 사용하기

library(MASS) 
library(stargazer) 

data(Boston) 

# This doesn't work 
by.river <- split(Boston, Boston$chas) 
fit <- lapply(by.river, lm, formula = crim ~ indus) 
stargazer(fit, type = "text") 

# % Error: Unrecognized object type. 
# % Error: Unrecognized object type. 

나는이 잘 작동을 수동으로 나누는 경우

# This works 
fit2 <- vector(mode = "list", length = 2) 
fit2[[1]] <- lm(crim ~ indus, data = Boston, subset = (chas == 0)) 
fit2[[2]] <- lm(crim ~ indus, data = Boston, subset = (chas == 1)) 
stargazer(fit2, type = "text") 

하지만 내 실제 데이터와

, 나는에 의해 분할 해요 것은 여러 값을 가지고 있으며, 차라리없는 것 그들을 모두 손으로 나눠 라. "% Error : Unrecognized object type."이 표시되는 이유는 무엇입니까? 오류?

+1

나는 왜 당신이 (그리고 나뿐만 아니라) 그 오류를 가져야하는지 알지 못한다. 도움말 페이지는 모델 객체 목록이 수용 가능한 입력이어야 함을 나타냅니다. 'fit'과'fit2' 사이에서 볼 수있는 유일한 차이점은 'fit'이 번호 매김된다는 것입니다. –

+1

이것은 lm 객체가 함수 호출을 저장하는 방법과 관련이있을 수 있습니다. 'lapply (fit, summary)'를 쓰면,'lapply (fit2, summary)'와 비교해서' FUN (수식 = ..1, data = X [[1L]]) 전화 : lm (수식 = crim ~ indus, 데이터 = 보스턴, 부분 집합 = (chas == 0))'. 그러나 그것이 내가 알아낼 수있는 가장 가까운 것입니다. –

+0

매우 흥미 롭습니다. 따라서 fit2 항목은 호출로 저장되지만 필요할 때까지 평가되지 않습니다. R의 게으른 평가 메커니즘의 또 다른 효과처럼 들립니다. 'stargazer'는 평가되지 않은 표현을보고 평가 메커니즘을 통해 그것을 밀어 내지 않습니다. 패키지 관리자에게 보내는 메모가 필요할 수도 있습니다. –

답변

4

쉬운 해결 방법이 있으며 BondedDust에서 암시되고 lapply에 대한 도움말을 자세히 읽으십시오.

+0

너무 익명의 함수가 없으면 작동하지 않지만 이는 합리적인 해결 방법처럼 보입니다. –

+0

"stargazer"가 객체의 유형을 식별하는 방법과 관련이 있어야합니다. 'AICcmodavg' 패키지의 함수는 이런 방식으로 생성 된 모델 목록과 잘 맞습니다. – atiretoo