在R中使用列表:对循环说不?
我想找到一种更好的方法,根据R中的逻辑函数将列表折叠成数据帧。下面是一个可复制的示例,说明了对我有效的方法:在R中使用列表:对循环说不?,r,list,R,List,我想找到一种更好的方法,根据R中的逻辑函数将列表折叠成数据帧。下面是一个可复制的示例,说明了对我有效的方法: a <- data.frame(foo = c(1:3), bar = c(letters[1:3])) bazL <- list(c("a", "z", "g"), NULL, "c") a$baz <- NULL for(i in 1:length(a$foo)) { a$baz[i] <- (bazL[[i]] > 0)[1] } a您可以使用
a <- data.frame(foo = c(1:3), bar = c(letters[1:3]))
bazL <- list(c("a", "z", "g"), NULL, "c")
a$baz <- NULL
for(i in 1:length(a$foo)) {
a$baz[i] <- (bazL[[i]] > 0)[1]
}
a您可以使用is.null
检查每个列表项是否为空
#a$baz =
!sapply(bazL, is.null)
#[1] TRUE FALSE TRUE
您可以使用is.null
检查每个列表项是否为空
#a$baz =
!sapply(bazL, is.null)
#[1] TRUE FALSE TRUE
我们可以使用Filter
过滤掉列表中的空元素
Filter(Negate(is.null), bazL)
或者获取一个逻辑向量
lengths(bazL)>0
#[1] TRUE FALSE TRUE
我们可以使用Filter
过滤掉列表中的空元素
Filter(Negate(is.null), bazL)
或者获取一个逻辑向量
lengths(bazL)>0
#[1] TRUE FALSE TRUE
您可以使用purr
软件包提供的map
功能。比如说,
library(dplyr)
library(purrr)
a <- mutate(a, baz = map(bazL, ~ !is.null(.x)))
库(dplyr)
图书馆(purrr)
a您可以使用purr
软件包提供的map
功能。比如说,
library(dplyr)
library(purrr)
a <- mutate(a, baz = map(bazL, ~ !is.null(.x)))
库(dplyr)
图书馆(purrr)
很好的回答。这将很好地推广到我将在列表上进行的其他工作中。回答不错。这将很好地推广到我将在列表上进行的其他工作中。简单而有效。我没有测试过滤函数,但这不是与取消列表相同吗?@Simon如果在向量的列表上使用取消列表
,它会将其更改为单个向量
。在数据框
或列表
上应用过滤器
,以根据功能条件简单有效地删除单个组件,即列或列表元素。我没有测试过滤函数,但这不是与取消列表相同吗?@Simon如果在向量的列表上使用取消列表
,它会将其更改为单个向量
。在数据框
或列表
上应用过滤器
,根据功能条件删除单个组件,即列或列表元素purr包的使用非常好。purr包的使用非常好。