我在列表中有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))
)
答案 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]])