我有这段代码,我想构建到一个函数中,我将数据框名称、ResponseId 变量名称和一系列变量传递给该函数。它在 ResponseId 变量名称和变量范围上令人窒息。我认为这是因为我将它们错误地传递给了函数。
工作块:
set.seed(1024)
premice_1 <- subset(emu_raw, select=c(ResponseId, PMS_1:PMS_45))
premice_2 <- mice(premice_1, maxit=0, pri=F)
pred <- premice_2$pred
pred[,c("ResponseId")] <- 0
meth <- premice_2$meth
meth[c("ResponseId")] <- ""
postmice_a <- mice(premice_1, m=1, maxit=10, printFlag=TRUE, pred=pred,
meth=meth, seed=4201)
postmice_b <- mice::complete(postmice_a, "long", include=FALSE)
postmice_b$.imp <- NULL
postmice_b$.id <- NULL
emu_raw <- merge(emu_raw, postmice_b)
失败的功能,当我用这个调用它时:
missing_values(emu_raw, ResponseId, PMS_1:PMS_45)
——当然说 PMS_1 不存在,因为传递一系列列似乎有问题
missing_values <- function(df, ResponseId, measure_range) {
set.seed(1024)
premice_1 <- subset(df, select=c(ResponseId, measure_range))
premice_2 <- mice(premice_1, maxit=0, pri=F)
pred <- premice_2$pred
pred[,c("ResponseId")] <- 0
meth <- premice_2$meth
meth[c("ResponseId")] <- ""
postmice_a <- mice(premice_1, m=1, maxit=10, printFlag=TRUE, pred=pred,
meth=meth, seed=4201)
postmice_b <- mice::complete(postmice_a, "long", include=FALSE)
postmice_b$.imp <- NULL
postmice_b$.id <-NULL
return(postmice_b)
}
我试过用括号而不是整洁的 subset() 函数来处理子集,但结果相同。
missing_values <- function(df, ResponseId, measure_range) {
set.seed(1024)
#premice_1 <- subset(df, select=c(ResponseId, measure))
premice_1 <- df[,c(ResponseId, measure_range)]
premice_2 <- mice(premice_1, maxit=0, pri=F)
pred <- premice_2$pred
pred[,c(ResponseId)] <- 0
meth <- premice_2$meth
meth[c(ResponseId)] <- ""
postmice_a <- mice(premice_1, m=1, maxit=10, printFlag=TRUE, pred=pred,
meth=meth, seed=4201)
postmice_b <- mice::complete(postmice_a, "long", include=FALSE)
postmice_b$.imp <- NULL
postmice_b$.id <- NULL
return(postmice_b)
}```
`missing_values(emu_raw, "ResponseId", PMS_1:PMS_45)`
Error in `[.tbl_df`(df, , c(ResponseId, measure_range)) :
object 'PMS_1' not found
3. `[.tbl_df`(df, , c(ResponseId, measure_range))
2. df[, c(ResponseId, measure_range)]
1. missing_values(emu_raw, "ResponseId", PMS_1:PMS_45)