如何更优雅地限制列表中特定data.frame的重复删除?

时间:2016-11-10 10:22:03

标签: r dataframe duplicates

我在列表中有data.frame对象作为自定义函数的输出,我打算只重复删除第一个data.frame对象,而其他对象不应该受影响。我在lapply函数中尝试了这个来控制这个约束,但我有下标错误。我知道这更容易分开进行,但这对我来说并不理想。谁能指出我如何在函数式编程中更容易?有谁知道控制列表中特定对象约束的任何有用技巧?

迷你示例:

myList <- list(
  bar = data.frame(v1=c(12,21,37,21,37), v2=c(14,29,45,29,45)),
  cat = data.frame(v1=c(18,42,18,42,81), v2=c(27,46,27,46,114)),
  foo = data.frame(v1=c(3,3,33,3,33,91), v2=c(26,26,42,26,42,107))
)

这样做很容易:

.first <- unique(myList[[1L]])
res <- c(list(.first), myList[- 1L])

但我需要限制重复删除只对第一个data.frame有影响,而其他人不会删除重复,我打算以更优雅的方式实现这个。

期望的输出:

myOutput <- list(
  bar = data.frame(v1=c(12,21,37),v2=c(14,29,45)),
  cat = data.frame(v1=c(18,42,18,42,81), v2=c(27,46,27,46,114)),
  foo = data.frame(v1=c(3,3,33,3,33,91), v2=c(26,26,42,26,42,107))
)

1 个答案:

答案 0 :(得分:2)

如果我们需要使用lapply,那么我们可以遍历list的序列,并使用if/else修改list元素

lapply(seq_along(myList), function(i) if(i==1) unique(myList[[i]]) else myList[[i]])  

否则我们可以分配修改后的list元素

myList[[1]] <- unique(myList[[1]])