通过函数调用顺序馈入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。
答案 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)