检查列表是否有 `any` NA - 警告
Checking if a list has `any` NA - warning
我正在寻找一种方法来检查列表是否包含任何 NA 元素,而不使用 for
循环。另外,如果可能,了解警告的原因。
这是我当前的上下文:我正在使用 lapply 检查 possible.existing.files 中的所有文件是否确实存在。
logic.vet <- lapply(possible.existing.files, file.exists)
return 将是一个布尔值列表。
因此,我需要检查这些元素中是否有任何元素为 FALSE。为此,我使用 any
: !any(logic.vet)
。然而,它触发了一个 R 警告,告诉:
Warning message:
In any(logic.vet) : coercing argument of type 'list' to logical
我试图通过 "casting" 列表到向量来解决这个问题,如:as.vector(logic.vet)
,但是 cast 对变量的结构没有影响。它仍然是一个列表。
最后,any
还有其他选择吗?目前,我正在使用 options(warn = 0)
来隐藏警告,但它似乎不正确。
只是为了提供一个可重现的例子,让我们假设 lapply
return 一个
list(TRUE, FALSE)
现在,如何检查是否有假?
考虑
test <- list(T, F, T)
> test
[[1]]
[1] TRUE
[[2]]
[1] FALSE
[[3]]
[1] TRUE
要查看是否有 FALSE
个元素,请使用
> !unlist(test)
[1] FALSE TRUE FALSE
现在,要获取所有 FALSE
个元素的位置,只需使用
> which(!unlist(test))
[1] 2
要取消选择 FALSE
个元素,因此使用
possible.existing.files[-which(!unlist(logic.vet))]
不需要lapply()
。 file.exists()
是向量化的,即它接受一个向量作为输入。
files <- c("test1.txt", "test2.txt", "test3.txt", "test4.txt")
file.create(files)
# Just to check visually
list.files(pattern="^test")
possible.existing <- c("foo", files, "bar.zip")
# Any files not existing?
any(!file.exists(possible.existing))
# Which?
possible.existing[!file.exists(possible.existing)]
file.remove(files)
我正在寻找一种方法来检查列表是否包含任何 NA 元素,而不使用 for
循环。另外,如果可能,了解警告的原因。
这是我当前的上下文:我正在使用 lapply 检查 possible.existing.files 中的所有文件是否确实存在。
logic.vet <- lapply(possible.existing.files, file.exists)
return 将是一个布尔值列表。
因此,我需要检查这些元素中是否有任何元素为 FALSE。为此,我使用 any
: !any(logic.vet)
。然而,它触发了一个 R 警告,告诉:
Warning message:
In any(logic.vet) : coercing argument of type 'list' to logical
我试图通过 "casting" 列表到向量来解决这个问题,如:as.vector(logic.vet)
,但是 cast 对变量的结构没有影响。它仍然是一个列表。
最后,any
还有其他选择吗?目前,我正在使用 options(warn = 0)
来隐藏警告,但它似乎不正确。
只是为了提供一个可重现的例子,让我们假设 lapply
return 一个
list(TRUE, FALSE)
现在,如何检查是否有假?
考虑
test <- list(T, F, T)
> test
[[1]]
[1] TRUE
[[2]]
[1] FALSE
[[3]]
[1] TRUE
要查看是否有 FALSE
个元素,请使用
> !unlist(test)
[1] FALSE TRUE FALSE
现在,要获取所有 FALSE
个元素的位置,只需使用
> which(!unlist(test))
[1] 2
要取消选择 FALSE
个元素,因此使用
possible.existing.files[-which(!unlist(logic.vet))]
不需要lapply()
。 file.exists()
是向量化的,即它接受一个向量作为输入。
files <- c("test1.txt", "test2.txt", "test3.txt", "test4.txt")
file.create(files)
# Just to check visually
list.files(pattern="^test")
possible.existing <- c("foo", files, "bar.zip")
# Any files not existing?
any(!file.exists(possible.existing))
# Which?
possible.existing[!file.exists(possible.existing)]
file.remove(files)