顺序数据帧传递给函数

时间:2019-08-28 15:05:55

标签: r dataframe

通过函数调用顺序馈入data.frame不能正确更新吗?

我试图创建一个仅包含我需要通过函数发送的那四列的新data.frame,但是它似乎不起作用吗?

以下是我的函数调用

library(epitools)
library(tidyverse)
midp <- function(df) {



  # Evaluates the pval of the midp function based on two proportions of a dataframe that contain both the national rate and the rate of the hospital by Number of Infections/Device Days.  

  df1 <- rateratio.midp(c(df$X1 , df$X2, df$N1, df$N2)) 


  df2 <- data.frame(df1$p.value)  
  df3 <- round(select(df2, `midp.exact`), digits = 3)  
  df4 <- data.frame(df3[(nrow(df3)/2+1):(nrow(df3)),]) 
  df4 <- rename(df4,pval =  df3..nrow.df3..2...1...nrow.df3..... )

  df <- cbind(df, df4)



}

我的数据框

df <- data.frame( "X1" = c(1703, 4666, 1703, 4666), "X2" = c(0,3,0,4), "N1" = c(833658, 2758180, 833658, 2758180), "N2" = c(163, 3271, 989, 3223))

当我将此df传递给我的代码时,它应该在包含P值(pval)的表中产生最后一列,为了检查代码,我通过以下检查分别传递了每个变量

x <- rateratio.midp(c(df$X1[1] , df$X2[1], df$N1[1], df$N2[1]))
xx <- rateratio.midp(c(df$X1[2] , df$X2[2], df$N1[2], df$N2[2]))

在这种情况下,x $ p.value [2]和xx $ p.value [2]应该分别是df上pval 1和2位置的值(0.716,0.284)。但事实并非如此。相反,它似乎在第二次迭代中将1703和833658值保持在X1和N1位置。

我希望函数调用的输出最初为0.717、0.284、0.133、0.572,但实际输出为0.717、0.138、0.133、0.321。

1 个答案:

答案 0 :(得分:1)

如果我们需要遍历每一行,请使用pmap

library(purrr)
library(dplyr)
library(epitools)
midp <- function(dat) {
      pmap(dat, ~  data.frame(rateratio.midp(c(...))$p.value)['midp.exact'] %>%
                   round(3)
                 )


    }

midp(df)