我可以使用group_map或group_walk迭代导出结果吗?

我可以使用group_map或group_walk迭代导出结果吗?,r,tidyverse,contingency,R,Tidyverse,Contingency,我想使用group_walk()或group_map()作为导入批.csv文件的替代方法,以迭代方式处理比较主列表 我想输入一个如下所示的数据集: 试验测定 Var1 Var2 频率 化验1 负数 负数 19 化验1 负数 销售时点情报系统 5. 化验1 销售时点情报系统 负数 8. 化验1 销售时点情报系统 销售时点情报系统 141 化验2 负数 负数 25 化验2 负数 销售时点情报系统 6. 化验2 销售时点情报系统 负数 17 化验2 销售时点情报系统 销售时点情报系统 33 化验3 负

我想使用group_walk()或group_map()作为导入批.csv文件的替代方法,以迭代方式处理比较主列表

我想输入一个如下所示的数据集:

试验测定 Var1 Var2 频率 化验1 负数 负数 19 化验1 负数 销售时点情报系统 5. 化验1 销售时点情报系统 负数 8. 化验1 销售时点情报系统 销售时点情报系统 141 化验2 负数 负数 25 化验2 负数 销售时点情报系统 6. 化验2 销售时点情报系统 负数 17 化验2 销售时点情报系统 销售时点情报系统 33 化验3 负数 负数 99 化验3 负数 销售时点情报系统 20 化验3 销售时点情报系统 负数 5. 化验3 销售时点情报系统 销售时点情报系统 105
您需要在
组映射
中调用您的函数。此外,该函数还需要两个参数,因此还需要传递
目录

使用此功能-

library(tidyverse)
library(epiR)
library(irrCAC)


epi_analysis <- function(.x, the_dir){
dat2 <- .x  %>%
  select(c(Var1, Var2, Freq)) %>%
  pivot_wider(Var1, names_from = Var2, values_from = Freq) %>%
  remove_rownames %>% 
  column_to_rownames( var = "Var1") %>% 
  as.matrix() 

#Run tests
rval <- epi.tests(dat2, conf.level = 0.95)
rkappa<-epi.kappa(dat2)
gwet <- gwet.ac1.table(dat2)
kappa2 <- kappa2.table(dat2)

#Export results
hd <- c('sensitivity', 'specificity', 'pfp', 'pfn', 'kappa', 'gwet', 'pabak')
ests <- c(round(rval$elements$sensitivity$est, digits = 3), 
          round(rval$elements$specificity$est, digits = 3), 
          round(rval$element$pfp$est, digits = 3), 
          round(rval$element$pfn$est, digits = 3), 
          round(kappa2$coeff.val, digits = 3), 
          round(gwet$coeff.val, digits = 3), 
          round(rkappa$pabak$est, digits = 3))
cis <- c(paste(round(rval$elements$sensitivity$lower, digits = 3), round(rval$elements$sensitivity$upper, digits = 3), sep = ","), 
         paste(round(rval$elements$specificity$lower, digits = 3), round(rval$elements$specificity$upper, digits = 3), sep = ","),
         paste(round(rval$element$pfp$lower, digits = 3), round(rval$element$pfp$upper, digits = 3), sep = ","),  
         paste(round(rval$element$pfn$lower, digits = 3), round(rval$element$pfn$upper, digits = 3), sep = ","), 
         kappa2$coeff.ci, 
         gwet$coeff.ci, 
         paste(round(rkappa$pabak$lower, digits = 3), round(rkappa$pabak$lower, digits = 3), sep = ","))

df <- data.frame(hd, ests, cis)

write.csv(df, 
          file = sprintf('%s/%s.csv', the_dir, .x$TestAssay[1]),
          na = "999.99", 
          row.names = FALSE)

}

您需要在
组映射
中调用您的函数。此外,该函数还需要两个参数,因此还需要传递
目录

使用此功能-

library(tidyverse)
library(epiR)
library(irrCAC)


epi_analysis <- function(.x, the_dir){
dat2 <- .x  %>%
  select(c(Var1, Var2, Freq)) %>%
  pivot_wider(Var1, names_from = Var2, values_from = Freq) %>%
  remove_rownames %>% 
  column_to_rownames( var = "Var1") %>% 
  as.matrix() 

#Run tests
rval <- epi.tests(dat2, conf.level = 0.95)
rkappa<-epi.kappa(dat2)
gwet <- gwet.ac1.table(dat2)
kappa2 <- kappa2.table(dat2)

#Export results
hd <- c('sensitivity', 'specificity', 'pfp', 'pfn', 'kappa', 'gwet', 'pabak')
ests <- c(round(rval$elements$sensitivity$est, digits = 3), 
          round(rval$elements$specificity$est, digits = 3), 
          round(rval$element$pfp$est, digits = 3), 
          round(rval$element$pfn$est, digits = 3), 
          round(kappa2$coeff.val, digits = 3), 
          round(gwet$coeff.val, digits = 3), 
          round(rkappa$pabak$est, digits = 3))
cis <- c(paste(round(rval$elements$sensitivity$lower, digits = 3), round(rval$elements$sensitivity$upper, digits = 3), sep = ","), 
         paste(round(rval$elements$specificity$lower, digits = 3), round(rval$elements$specificity$upper, digits = 3), sep = ","),
         paste(round(rval$element$pfp$lower, digits = 3), round(rval$element$pfp$upper, digits = 3), sep = ","),  
         paste(round(rval$element$pfn$lower, digits = 3), round(rval$element$pfn$upper, digits = 3), sep = ","), 
         kappa2$coeff.ci, 
         gwet$coeff.ci, 
         paste(round(rkappa$pabak$lower, digits = 3), round(rkappa$pabak$lower, digits = 3), sep = ","))

df <- data.frame(hd, ests, cis)

write.csv(df, 
          file = sprintf('%s/%s.csv', the_dir, .x$TestAssay[1]),
          na = "999.99", 
          row.names = FALSE)

}
我们可以使用

library(dplyr)
library(readr)
library(purrr)
read_csv("data_raw/EpiTest.csv") %>%
   group_split(TestAssay) %>%
   map(~ epi_analysis(.x, the_dir_ex))
我们可以使用

library(dplyr)
library(readr)
library(purrr)
read_csv("data_raw/EpiTest.csv") %>%
   group_split(TestAssay) %>%
   map(~ epi_analysis(.x, the_dir_ex))

这是有道理的,但是当我运行它时,我在basename(.x$TestAssay)中收到了这个错误:需要一个字符向量参数。另外:警告消息:basename(.x$TestAssay)中有错误:需要一个字符向量参数。我需要修复我的功能吗?我想是的。您的功能是否在没有
分组依据的情况下工作?尝试使用
epi_分析(df,the_dir_ex)
因此不需要,如果我运行
data@MBell,函数和
组映射中几乎不需要更改。我已经纠正了这一点并编辑了答案。你能试试最新的答案吗?我测试了你共享的数据的答案,得到了3个CSV作为输出。这非常有效,谢谢!出于好奇,函数中的paste0和sprintf之间有什么区别?这是有道理的,但是当我运行它时,我在basename(.x$TestAssay)中收到了这个错误:另外还需要一个字符向量参数:警告消息:basename中的错误(.x$TestAssay):需要一个字符向量参数。我需要修复我的功能吗?我想是的。您的功能是否在没有
分组依据的情况下工作?尝试使用
epi_分析(df,the_dir_ex)
因此不需要,如果我运行
data@MBell,函数和
组映射中几乎不需要更改。我已经纠正了这一点并编辑了答案。你能试试最新的答案吗?我测试了你共享的数据的答案,得到了3个CSV作为输出。这非常有效,谢谢!出于好奇,paste0和sprintf在函数中有什么区别?