2015-05-07 67 views
1

這可能是R中的一個基本問題,但我試圖在更大數據框的子集內循環數據。我在'while'命令中添加了'data = sub240'這一行,但是這會導致一個括號錯誤,我懷疑這是一個更大的問題。任何人都可以告訴我如何在數據框的子集上運行循環?我不認爲這是相關的,但我正在循環中使用'optiscale'包。在數據框子集內循環

{while (rsquared.differ > .00001 && niter <= 30 && data=sub240) { 
niter <- niter + 1 
reg.os<- lm(dvar.os ~ index.os + educ.os) 

rsquared.differ <- summary(reg.os)$r.squared - previous.rsquared 
previous.rsquared <- summary(reg.os)$r.squared 

record <- c(record, niter, summary(reg.os)$r.squared, rsquared.differ) 

if (rsquared.differ > .00001) { 
dvar.pred <- predict(reg.os) 

opscaled.dvar <- opscale(intknow, dvar.pred, level = 1, process = 1) 
dvar.os <- opscaled.dvar$os 

intknow240.pred <- (dvar.os - (reg.os$coefficients[1] + 
(reg.os$coefficients[4]*educ.os) 
))* 
(1/reg.os$coefficients[2]) 

opscaled.intknow240 <- opscale(anes$intknow, intknow240.pred, level = 1, process = 1) 
intknow240.os <- opscaled.intknow240$os 


}} 
+1

您還沒有提到這是什麼語言/技術。您應該相應地添加標籤。 – TeaDrivenDev

回答

1

data = sub240是一個賦值語句。您可以在自己的行或函數定義和調用中分配內容,但只能在while循環定義中提供邏輯語句。如果你想要邏輯平等,你需要==。但是除非data在循環中發生變化,並且您希望這是循環中斷的條件,那麼您不希望在while聲明中出現這種情況。但總的來說,無論如何不需要這樣的陳述。在R中作用域的工作方式,如果循環在循環外定義,則該循環仍應能夠訪問data

此外,我很肯定你不需要while之前的支架,只有在之後。當您的代碼站立時,它將不會運行,因爲該支架未閉合:您有三個開放的支架(while之前,while之後和if之後),但只有兩個緊密的支架(無論如何我都可以找到)。

嘗試這樣:

data <- sub240 
while(rsquared.differ > 0.00001 && niter <=30){ 
    # do stuff 
} 
+0

非常感謝!我認爲這很簡單,但無法在任何地方找到答案。 –

+0

沒問題,樂於幫忙! –