r-如何在不同的数据集上运行相同的代码



我在网站上看到了关于类似ish问题的不同主题和答案,但在我正在处理的这个特定设置中,几乎没有一个回答我的问题。

故事如下:

我有20个不同的数据集,它们都有完全相同的变量名,我想在它们上运行代码。我的问题与已经回答的问题有何不同:

我要运行的代码包括我编写的一些函数,其中一个必要的参数是";数据";,所以我不知道如何在参数中调用每个不同的数据集,以便函数能够运行!

以下是我正在处理的一个非常简单的规模:

X1<-c(1,1,1,0,1,0)
X2<c(0,1,1,0,0,0)
data1<-data.frame(X1,X2)
X1_1<- c(1,0,1,0,1,0)
X2_2<- c(1,1,0,0,0,0)
data2<-data.frame(X1_1,X2_2)
colnames(data2)<- c("X1", "X2")   # to rename the variables to become the same as data1
#The function
f1<- function(model1,model2,data){
d1=subset(data, X1==1)
p<- glm(model1, family= "binomial", data=d1)
pp<- predict (p, newdata=data, type="response")
q<- glm( model2, family= "binomial", data=data)
qq<- predict(q, newdata=data, type="response")
m=qq*pp
list<- list(m=m, pp=pp, qq=qq)
return(list)
}
f2<- function (model1, model2,data){
k<- glm(model1, family= "binomial", data=data)
kk<- predict (k, newdata=data, type="response")
j<- glm( model2, family= "binomial", data=data)
jj<- predict(j, newdata=data, type="response") 
L=kk+jj
list<- list(L=L, kk=kk, jj=jj)
return(list)
}
#The code I want to run that is supposed to use the function (now lets say for data1)
run1<- f1 (model1= X2~X1, model2= X1~X2, data=data1)
m<- run1$m
run2< -f2 (model1=X1~X2, model2, X2~X1, data=data1)
L<-run2$L
Q=m+L

p.S:一个总体的解释是,20个不同的数据集实际上是mices包中的maxit=20,因为我必须估算很多缺失的数据!为什么我不使用";用";以及";池"?因为正如你所看到的,我需要做";预测";不幸的是,老鼠没有这种可能性,所以我能想到的唯一方法就是使用每个估算的数据集,使用一个循环,表现得像一个有20次运行的模拟研究,然后采取我想要的任何结果!所以,如果有人有更好的解决方案,我会非常高兴知道!

张贴后添加:我正在为AITW和TMLE使用一种开发的方法,其中每个方法都有一个倾向得分模型和一个结果模型,开发的版本对结果和倾向得分模型各有2个不同的函数,在Harry要求我编辑这个问题以变得更详细后,我给出这个解释只是为了提示代码的行数,当";lapply";提出了解决方案。

更新

以建议的方式搭接并不能解决这个问题

试试这样的方法。我无法测试它,因为我不知道传递给函数的model1和model2对象是什么。您将看到列表元素的名称与数据帧的名称相匹配。lapply按顺序循环遍历已给定的列表对象。

X1<-c(1,1,1,0,1,0)
X2<-c(0,1,1,0,0,0)
data1<-data.frame(X1,X2)
X1_1<- c(1,0,1,0,1,0)
X2_2<- c(1,1,0,0,0,0)
data2<-data.frame(X1_1,X2_2)
colnames(data2)<- c("X1", "X2")   # to rename the variables to become the same as data1
#The function
#The function
f1<- function(model1,model2,data){

d1=subset(data, X1==1)
p<- glm(model1, family= "binomial", data=d1)
pp<- predict (p, newdata=data, type="response")

q<- glm( model2, family= "binomial", data=data)
qq<- predict(q, newdata=data, type="response")

m=qq*pp

list<- list(m=m, pp=pp, qq=qq)

return(list)
}
dat_in <- list("df1" = data1,
"df2" = data2)
fun1_out <- lapply(dat_in, FUN = function(x)f1(model1= X2~X1, model2= X1~X2, x))
fun2_out <- lapply(dat_in, FUN = function(x)f2(model1= X2~X1, model2= X1~X2, x))

fun1_out将是一个列表,其中包含dat_in中所有数据集的f1输出。fun2_out也是如此,依此类推,可以使用任意多个函数。

相关内容

最新更新