Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 如何循环变量中的重复值?_R_Loops_For Loop_Glm - Fatal编程技术网

R 如何循环变量中的重复值?

R 如何循环变量中的重复值?,r,loops,for-loop,glm,R,Loops,For Loop,Glm,我有一个名为bjmd的数据集,看起来像这样(简化): 我想运行一个循环,对每个不同的rte(46001460246003)进行glm分析。在每个rte中,有多个年份s,它们都需要包含在glm分析中。从每个路线的glm测试中,我获取坡度并创建另一个表格,其中route和slope作为列。这就是我希望它看起来的样子: rte slope 46001 x 46002 y 46003 z 下面是我提出的for循环代码: route<-with(bjmd,unique(rte))

我有一个名为
bjmd
的数据集,看起来像这样(简化):

我想运行一个循环,对每个不同的
rte
(46001460246003)进行
glm
分析。在每个
rte
中,有多个
年份
s,它们都需要包含在
glm
分析中。从每个路线的
glm
测试中,我获取坡度并创建另一个表格,其中route和slope作为列。这就是我希望它看起来的样子:

rte    slope
46001   x
46002   y
46003   z
下面是我提出的for循环代码:

route<-with(bjmd,unique(rte))
slope<-with(bjmd,numeric(length(unique(rte))))
table<-data.frame(route,slope)
for (i in unique(as.factor(bjmd$rte))) {
  data<-subset(bjmd, rte=='i')
  slope[i] <- coef(summary(glm(y ~  year+obs,
                               family = poisson(link=log),data=data)))[2,1]
  table[i,2] <-paste(slope[i])
})
table

谁能帮我指出我把事情搞砸了吗?

不需要循环;只需使用
split
将数据集按照
rte
进行分组即可。然后用
lappy
为每组拟合一个模型

lapply(split(bjmd, bjmd$rte), function(dat) glm(y ~ year + obs, data=dat))
您还可以使用交互项一次性对所有内容进行建模。预测值将相同,但剩余偏差、df和P值将不同。哪种方法更适合您的需求取决于您的项目

glm(y ~ (year + obs) * factor(rte), data=bjmd)

您需要从
数据中删除
i
周围的引号
lapply(split(bjmd, bjmd$rte), function(dat) glm(y ~ year + obs, data=dat))
glm(y ~ (year + obs) * factor(rte), data=bjmd)