如何将列表传递给R中的函数

时间:2017-01-09 11:05:37

标签: r for-loop apply

我想在列表中存储线性回归的结果,如截距和系数。我有以下代码

results  = list()
intercept = list()
coeff = list()

GetLM = function(dataframe,results,intercept,coeff){
     unq_clients = as.vector(unique(dataframe$clients))
     for(i in 1:length(unq_clients)){
         new_df=dataframe[dataframe$clients ==    unq_clients[i],]
         regression= lm(a ~ b,data = new_df )
         results[[i]] = coef(regression)
         intercept[i] = results[[i]][1]
         coeff[i]=results[[i]][2]
     }
}

但是当我调用该函数时,没有任何内容存储在列表中。我做错了什么?

2 个答案:

答案 0 :(得分:0)

我觉得你用非R方式编程这个功能。为什么您需要resultsinterceptcoeff作为GetLM的参数?相反,使函数返回包含以下变量的列表:

GetLM <- function(dataframe){
     unq_clients <- as.vector(unique(dataframe$clients))
     for(i in 1:length(unq_clients)){
         new_df <- dataframe[dataframe$clients == unq_clients[i],]
         regression <- lm(a~b,data = new_df )
         results <- coef(regression)
         intercept[i] <- results[[i]][1]
         coeff[i] <- results[[i]][2]
     }
     return(list(results = results, intercept = intercept, coeff = coeff))
}

现在你可以做到:

reslist <- GetLM(dataframe = your_data_frame)
results <- reslist$results
intercept <- reslist$intercept
coeff <- reslist$coeff

答案 1 :(得分:0)

您可以完全继续使用自己的代码,只需添加List语句,就像我在评论中提到的那样。

在这里,我使用List来替换return()循环,并使其更加通用,即使您的模型具有多于1个独立,您也可以更好地提取它们。 / p>

注意:由于您未与我们分享任何数据,我正在使用lapply()进行解释

for