我有一个数据框中的列表,我想使用
虽然我可以使用 sapply 来做到这一点,但 map 不起作用。我阅读了 https://cran.r-project.org/web/packages/purrr/purrr.pdf,但我无法弄清楚我缺少了什么。
这是我的 sapply 代码 - 这很好地工作:
purrr::map()
来测试是否有任何 NULL
元素,并将它们去掉。虽然我可以使用 sapply 来做到这一点,但 map 不起作用。我阅读了 https://cran.r-project.org/web/packages/purrr/purrr.pdf,但我无法弄清楚我缺少了什么。
这是我的 sapply 代码 - 这很好地工作:
P_Trans<- P_Trans[!sapply(P_Trans$Group,is.null),]
以下是我尝试过的几种 purrr::map
方法,但它们都无法正常工作。
这是我尝试过的四种方法:
a)
P_Trans %>% purrr::map(.,~is.null(Group))
b)
P_Trans %>% purrr::map(.,~is.null(.$Group))
c)
P_Trans %>% purrr::map(~is.null(.$Group))
d)
P_Trans %>% purrr::map(~is.null(Group))
请问有人能够纠正我的错误,并告诉我在上述四个选项中我做错了什么吗?
数据:
dput(P_Trans)
structure(list(TransactionID = c("a1", "a1", "a1", "a2", "a2",
"a2", "a3", "a3", "a3", "a3", "a4", "a5", "a5", "a5", "a5", "a5",
"a6", "a6", "a7"), ProductID = c("A", "B", "1", "C", "4", "5",
"D", "C", "7", "8", "H", "1", "2", "3", "3", "1", "H", "15",
"22"), ProductType = c(1, 1, 2, 1, 2, 2, 1, 1, 2, 2, 1, 2, 2,
2, 2, 2, 1, 2, 3), Group = list(structure(list(Group = "Group1"), .Names = "Group", row.names = c(NA,
-1L), class = c("tbl_df", "tbl", "data.frame")), structure(list(
Group = "Group1"), .Names = "Group", row.names = c(NA, -1L
), class = c("tbl_df", "tbl", "data.frame")), structure(list(
Group = "Group1"), .Names = "Group", row.names = c(NA, -1L
), class = c("tbl_df", "tbl", "data.frame")), structure(list(
Group = c("Group2", "Group3")), .Names = "Group", row.names = c(NA,
-2L), class = c("tbl_df", "tbl", "data.frame")), structure(list(
Group = "Group2"), .Names = "Group", row.names = c(NA, -1L
), class = c("tbl_df", "tbl", "data.frame")), structure(list(
Group = "Group2"), .Names = "Group", row.names = c(NA, -1L
), class = c("tbl_df", "tbl", "data.frame")), structure(list(
Group = "Group3"), .Names = "Group", row.names = c(NA, -1L
), class = c("tbl_df", "tbl", "data.frame")), structure(list(
Group = c("Group2", "Group3")), .Names = "Group", row.names = c(NA,
-2L), class = c("tbl_df", "tbl", "data.frame")), structure(list(
Group = "Group3"), .Names = "Group", row.names = c(NA, -1L
), class = c("tbl_df", "tbl", "data.frame")), structure(list(
Group = "Group3"), .Names = "Group", row.names = c(NA, -1L
), class = c("tbl_df", "tbl", "data.frame")), structure(list(
Group = "Group5"), .Names = "Group", row.names = c(NA, -1L
), class = c("tbl_df", "tbl", "data.frame")), structure(list(
Group = "Group1"), .Names = "Group", row.names = c(NA, -1L
), class = c("tbl_df", "tbl", "data.frame")), structure(list(
Group = "Group1"), .Names = "Group", row.names = c(NA, -1L
), class = c("tbl_df", "tbl", "data.frame")), structure(list(
Group = "Group1"), .Names = "Group", row.names = c(NA, -1L
), class = c("tbl_df", "tbl", "data.frame")), structure(list(
Group = "Group1"), .Names = "Group", row.names = c(NA, -1L
), class = c("tbl_df", "tbl", "data.frame")), structure(list(
Group = "Group1"), .Names = "Group", row.names = c(NA, -1L
), class = c("tbl_df", "tbl", "data.frame")), structure(list(
Group = "Group5"), .Names = "Group", row.names = c(NA, -1L
), class = c("tbl_df", "tbl", "data.frame")), structure(list(
Group = "Group5"), .Names = "Group", row.names = c(NA, -1L
), class = c("tbl_df", "tbl", "data.frame")), NULL)), class = c("tbl_df",
"tbl", "data.frame"), row.names = c(NA, -19L), .Names = c("TransactionID",
"ProductID", "ProductType", "Group"))
P_Trans[!map_lgl(P_Trans$Group,is.null),]
? - Natemap
,通常是为了建模。默认情况下,map
试图返回一个列表,使用像map-lgl
这样的包装器只是将结果强制转换为类似于map(p_trans$Group, is.null) %>% unlist
的向量形式,但仍然保留名称等内容 :) 希望这有所帮助,map
有时仍然会让我感到困惑,我会回到xapply
。 - Natepurrr::discard()
呢? - hrbrmstr