我想在列表中存储线性回归的结果,如截距和系数。我有以下代码
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]
}
}
但是当我调用该函数时,没有任何内容存储在列表中。我做错了什么?
答案 0 :(得分:0)
我觉得你用非R方式编程这个功能。为什么您需要results
,intercept
和coeff
作为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