Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在R中访问列表中的可变长度列表_R - Fatal编程技术网

如何在R中访问列表中的可变长度列表

如何在R中访问列表中的可变长度列表,r,R,当我在数据帧的一列上调用strsplit()时,根据strsplit()的结果,有时会由于拆分而得到一个或两个“子列表”。比如说, v <- c("50", "1 h 30 ", "1 h", NA) split <- strsplit(v, "h") [[1]] [1] "50" [[2]] [1] "1" " 30" [[3]] [1] "1 " [[4]] [1] NA v一个常见的习惯用法是lappy(l,[,2),应用到您的示例中,它给出了: > lapp

当我在数据帧的一列上调用strsplit()时,根据strsplit()的结果,有时会由于拆分而得到一个或两个“子列表”。比如说,

v <- c("50", "1 h 30 ", "1 h", NA)
split <- strsplit(v, "h")
[[1]]
[1] "50"

[[2]]
[1] "1"   " 30"

[[3]]
[1] "1 "

[[4]]
[1] NA

v一个常见的习惯用法是
lappy(l,
[
,2)
,应用到您的示例中,它给出了:

> lapply(split, `[`, 2)
[[1]]
[1] NA

[[2]]
[1] " 30 "

[[3]]
[1] NA

[[4]]
[1] NA
sapply()
将尽可能将其折叠为向量

现在要做的是
lappy()
依次获取
拆分的每个组件-这是伪代码的
[[i]]
位-并对每个组件提取
n
第th元素。我们通过应用
[/code>函数和参数
n
-在本例中为
2L

如果您想要第一个元素,除非有第二个元素,在这种情况下,请使用第二个元素,您可以只编写一个包装器,而不是直接使用
[

wrapper <- function(x) {
    if(length(x) > 1L) {
        x[2L]
    } else {
        x[1L]
    }
}

lapply(split, wrapper)
或许

lens <- lengths(split)
out <- lapply(split, `[`, 2L)
ind <- lens == 1L
out[ind] <- lapply(split[ind], `[`, 1L)
out
镜头
> lapply(split, wrapper)
[[1]]
[1] "50"

[[2]]
[1] " 30 "

[[3]]
[1] "1 "

[[4]]
[1] NA
lens <- lengths(split)
out <- lapply(split, `[`, 2L)
ind <- lens == 1L
out[ind] <- lapply(split[ind], `[`, 1L)
out