2016-12-14 115 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