有条件地子集一个附加变量,并将其附加到R中的前一个变量

时间:2019-11-06 22:03:16

标签: r list function dataframe subset

我正在跟踪此 excellent answer 。我有一个subset用户what(即一个变量)从this dataset中请求的功能。

我想知道如何在输出中添加control == TRUE如果它们不存在并将其追加到用户请求的what上,否则不做任何事情。

作为缺少control == T的示例,假设用户希望使用type == 4来对条目进行子集化。在this dataset中,有一些这样的条目。如下面的可重现的代码和数据所示,这很容易做到但是,还有control == TRUE的其他条目,如何通过功能找到并附加这些{{ 1}}的当前可生产输出条目?

作为当前control == TRUE的示例,假设用户希望使用control == T子集条目。在这种情况下,prof == 2条目自然会随子集一起提供,不需要添加。所以什么也不要做。

control == T

1 个答案:

答案 0 :(得分:1)

我们可以将功能修改为

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)