【问题标题】:How to access all sub list elements in R at once? [duplicate]如何一次访问 R 中的所有子列表元素? [复制]
【发布时间】:2019-06-13 10:30:14
【问题描述】:

我有一个像这样的向量的拆分字符串

df <- c("Test A:No1", "Test B:No2")
l <- str_split(df, ":")
l

让我回来

[[1]]
[1] "Test A" "No1" 

[[2]]
[1] "Test B" "No2" 

现在我有兴趣独立访问所有第一个元素和所有最后一个元素或创建一个类似的向量

[1] "Test A" "Test B"

[1] "No1" "No2"

我尝试了几种类型的单括号和双括号,带和不带逗号,但 l[[x]][1] 或 l[[x]][2] 只给我列表元素 x。

如何一次访问所有元素(例如 l[[]][1] )?

【问题讨论】:

  • ?data.table::tstrsplit

标签: r list


【解决方案1】:

您可以使用sapply

sapply(l, `[`, 1)
# [1] "Test A" "Test B"

sapply(l, `[`, 2)
# [1] "No1" "No2"

解释: 在 R 中,几乎所有东西都是函数。括号`[` 实际上也是函数。考虑以下示例可以清楚地说明上述sapply 的工作原理。

示例

考虑这个向量

x <- c("A", "B")

我们在做什么

x[1]
# [1] "A"
x[2]
# [2] "B"

我们实际上是在应用 `[` 函数的底层前缀形式的特殊形式:

`[`(x, 1)
# [1] "A"
`[`(x, 2)
# [1] "B"

【讨论】:

  • 这行得通。但是为什么呢?在整个列表上应用函数“[”?我怎么知道参数 1 和 2 会起作用?
  • @StefanL。我应该早点添加解释; 1 分别。 2 表示向量元素在列表中的位置。您可以在Hadley Wickam's Advanced R 阅读更多内容。
  • 这就是我想要的!!!谢谢~~~
【解决方案2】:

也许使用 unlist 和 lapply 可以完成工作。

df <- c("Test A:No1", "Test B:No2")
l <- str_split(df, ":")

> unlist(lapply(l,function(x) x[1]))
[1] "Test A" "Test B"
> unlist(lapply(l,function(x) x[length(x)]))
[1] "No1" "No2"

【讨论】:

    猜你喜欢
    • 2023-04-07
    • 1970-01-01
    • 2019-09-01
    • 2013-02-11
    • 2021-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-12
    相关资源
    最近更新 更多