Повторите функцию поднабора, добавив новую переменную поднабора в каждом раунде в R - PullRequest
1 голос
/ 18 октября 2019

У меня есть функция (foo) для подстановки любой переменной из списка L. Работает отлично! Но могу ли я по умолчанию добавить переменную weeks к какой-либо подмножеству переменной?

Например, предположим, что я хочу подмножество type == 1, могу ли я также по умолчанию добавить все уникальные значения weeks (в моемданные weeks имеют 3 уникальных значений, исключая NA), что зациклено:

type==1 & weeks==1 (раунд 1);type==1 & weeks==2 (Раунд 2);type==1 & weeks==3 (Раунд 3)

foo <- function(List, what){     
  s <- substitute(what) 
  h <- lapply(List, function(x) do.call("subset", list(x, s)))
 h1 <- Filter(NROW, h)      
 h2 <- lapply(List[names(h1)], function(x) subset(x, control))
 Map(rbind, h1, h2)      
}
## EXAMPLE OF USE:
D <- read.csv("https://raw.githubusercontent.com/rnorouzian/m/master/k.csv", h = T) # DATA
L <- split(D, D$study.name) ; L[[1]] <- NULL   # list `L`
## RUN:
foo(L, type == 1)  # Requested
# Repeat Requested above in a loop:
foo(L, type==1 & weeks==1) # (Round 1)
foo(L, type==1 & weeks==2) # (Round 2)
foo(L, type==1 & weeks==3) # (Round 3)

1 Ответ

1 голос
/ 18 октября 2019

Вы можете сделать:

foo <- function(List, what, time = 1){     
  s <- substitute(what)
  s <- bquote(.(s) & weeks == time)
  h <- lapply(List, function(x) do.call("subset", list(x, s)))
 h1 <- Filter(NROW, h)      
 h2 <- lapply(List[names(h1)], function(x) subset(x, control))
 Map(rbind, h1, h2)      
}

# AND THEN:
lapply(1:3, function(i) foo(L, type == 1, time = i))
...