2016-12-14 201 views
-1

我想改變這個代碼有替代功能:Python函數返回多個

variables = ['oki']    
for var in variables: 
    lm_full = sm.formula.ols(formula='%s ~ diag + age + ICVcm3' % var, data=dfwo2).fit() 
    print("===============================================================================") 
    print("   formule = %s ~ diag + age + ICVcm3" % var) 
    print("===============================================================================") 
    print(lm_full.summary()) 

最後我想的東西,看起來像:

function(oki,diag,age,ICVcm3,dfwo2),將返回的結果循環。

我不知道該怎麼做。我在互聯網上找到的例子是非常基本的......我甚至不知道要在谷歌上輸入什麼才能得到答案。

+0

你要聚集* BASIC *導致你就錯過了互聯網,並需要修改它們按您的要求。 –

+0

循環返回的基本模式:以累加器列表'result = []'開始; '.append()'每次迭代的結果到循環中的累加器;返回'結果'。 – DyZ

回答

-1

您的循環變量只包含1個變量:一個字符串。 無論如何,這種循環的目的是什麼?診斷,年齡,ICVcm3,dfwo2所有這些值都在哪裏?什麼是關於的功能?似乎是一些非常具體的奇怪的話題。

雖然只是猜測,這樣的事情可能是你一直在尋找的東西:

def myfunction(variables,diag,age,ICVcm3,dfwo2): 
    for var in variables: 
     lm_full = sm.formula.ols(formula='%s ~ diag + age + ICVcm3' % var, data=dfwo2).fit() 
     print("===============================================================================") 
     print("   formule = %s ~ diag + age + ICVcm3" % var) 
     print("===============================================================================") 
     print(lm_full.summary()) 
+0

該函數不返回循環的結果。它返回一個'None'。 – DyZ

2

您可以返回元組的列表:

def myFunction(variables): 
    result = [] 
    for var in variables: 
     formula = "   formule = %s ~ diag + age + ICVcm3" % var 
     lm_full = sm.formula.ols(formula=formula, data=dfwo2).fit() 
     result.append((formula, lm_full.summary())) 
    return result 
1

這段代碼演示瞭如何返回在函數中計算的項目以及如何在調用函數中檢索它們。請注意,您可以根據需要返回儘可能多或很少的項目,即使該函數返回的項目您的調用代碼不需要,您可以忽略它們。 (這就是名稱爲dummy的變量的目的。)

我使用statsmodels隨附的數據集之一,因爲我無法識別您正在使用的數據集。

import statsmodels as sm 
df = sm.datasets.get_rdataset("Guerry", "HistData").data 
df = df[['Lottery', 'Literacy', 'Wealth', 'Region']].dropna() 
import statsmodels.formula.api as smf 

def regress(variables): 
    results = [ ] 
    for variable in variables: 
     mod = smf.ols(formula='Lottery ~ %s' % variable, data=df) 
     result = mod.fit() 
     results . append ((variable, result.params, result.df_resid, result.rsquared)) 
    return results 

for result in regress (['Literacy', 'Wealth', 'Region']): 
    variable, dummy, dummy, R_squared = result 
    print (variable, R_squared ) 

的結果是這樣的:

Literacy 0.145720612937 
Wealth 0.243180384656 
Region 0.142107524677