условно подставить дополнительную переменную и добавить ее к предыдущей в R - PullRequest
1 голос
/ 07 ноября 2019

Я слежу за этим отличный ответ . У меня есть функция, которую subset s what (то есть переменная) пользователь запрашивает из этого набора данных .

Мне было интересно, как добавить control == TRUE записей ЕСЛИ ОНИ ОТСУТСТВУЮТ в выводе и добавить их к what, о которых просил пользователь, иначе ничего не делать.

В качестве примера control == T отсутствует, предположим, что пользователь хочет поднастроить записи с type == 4. В этом наборе данных есть несколько таких записей. Как показывают воспроизводимый код и данные ниже , это легко сделать НО Есть также некоторые другие записи, для которых control == TRUE, как функция может найти и добавить эти control == TRUE записи в свой производимый в настоящее время вывод?

В качестве примера control == T предположим, что пользователь хочет поднастроить записи с prof == 2. В этом случае control == T записи, естественно, поставляются с подмножеством и не нуждаются в добавлении. Так что ничего не делай.

foo <- function(List, what){       ## The subsetting function

  s <- substitute(what) 

  h <- lapply(List, function(x) do.call("subset", list(x, s)))

  Filter(NROW, h)
}


D <- read.csv("https://raw.githubusercontent.com/rnorouzian/m/master/k.csv", h = T) ## Dataset
L <- split(D, D$study.name) ; L[[1]] <- NULL   ## list by `study.name`

foo(L, type == 4)    ## subsets entries with `type == 4`. BUT how can function `foo` 
                     ## find and append entries with `control == TRUE` to its output?

foo(L, prof == 2)   # entries with `control == TRUE` are already present don't do anything!

1 Ответ

1 голос
/ 07 ноября 2019

Мы можем изменить функцию на

foo <- function(List, what){       ## The subsetting function

  s <- substitute(what) 

  h <- lapply(List, function(x) do.call("subset", list(x, s)))

  h1 <- Filter(NROW, h)
  nm1 <- names(which(!sapply(h1, function(x) any(x$control))))
  if(length(nm1) > 0) {
  h1[nm1]  <- Map(function(x, y) rbind(y, x[x$control, ]), List[nm1], h1[nm1])
  }
  h1

}

foo(L, type == 4) 
foo(L, prof == 2)
...