【发布时间】:2021-06-23 22:33:00
【问题描述】:
在我下面的split(w7, w7$study.name)[48] 调用中,变量control == FALSE 有4 行。
但我想知道为什么ctlistG(split(w7, w7$study.name)[48]) 只返回这样的行之一?
ps.我怀疑,我应该在 ctlistG() 中使用 mapply() 而不是 lapply()。
可重现的 R 代码:
ctlist <- function(List, cont=FALSE, pos=1, outcom=1){
if(!inherits(List, "list")) List <- list(List)
h <- setNames(lapply(List, function(i) i[i$control==cont & i$post == pos & i$outcome == outcom, , drop = FALSE]), names(List))
Filter(NROW, h) }
#====================
ctlistG <- function(m){
input <- setNames(lapply(m, function(i) rev(expand.grid(outcom = seq_len(max(i$outcome, na.rm = TRUE)), pos = seq_len(max(i$post, na.rm = TRUE))))), names(m))
lapply(input, function(i) ctlist(m, cont = FALSE, pos = i$pos, outcom = i$outcom)) }
#==================== EXAMPLE OF USE:
w7 <- read.csv('https://raw.githubusercontent.com/rnorouzian/m/master/w7.csv')
ctlistG(split(w7, w7$study.name)[48]) # I expect 4 rows not 1 below!
#$VanBe_Jng_KenA
#$VanBe_Jng_KenA$VanBe_Jng_KenA
# study.name YofPub group.name n d
#406 VanBe_Jng_KenA 2012 NA 34 NA
【问题讨论】:
-
如果您致电
w7 %>% filter(study.name == 'VanBe_Jng_KenA', !control),您将获得四行。然后你进一步过滤post和outcom。我建议先看这里。然后我建议你解释一下你实际上想要做什么,因为它根本不是很清楚。
标签: r function dataframe lapply mapply