相关疑难解决方法(0)

如何在没有强制的情况下将列表展平到列表?

我试图实现类似于unlist的功能,但类型不会被强制转换为向量,但会返回包含保留类型的列表.例如:

flatten(list(NA, list("TRUE", list(FALSE), 0L))
Run Code Online (Sandbox Code Playgroud)

应该回来

list(NA, "TRUE", FALSE, 0L)
Run Code Online (Sandbox Code Playgroud)

代替

c(NA, "TRUE", "FALSE", "0")
Run Code Online (Sandbox Code Playgroud)

将由...返回unlist(list(list(NA, list("TRUE", list(FALSE), 0L)).

从上面的例子中可以看出,扁平化应该是递归的.标准R库中是否有一个功能可以实现这一功能,或者至少还有一些其他功能可用于轻松有效地实现这一功能?

更新:我不知道从上面是否清楚,但非名单不应该被夷为平地,即flatten(list(1:3, list(4, 5)))应该返回list(c(1, 2, 3), 4, 5).

r list standard-library flatten type-coercion

49
推荐指数
4
解决办法
6128
查看次数

对 R 中列表内的列表长度求和

我在 R 的列表中有 2 个列表。每个子列表包含不同数量的数据帧。数据如下:

df1 <- data.frame(x = 1:5, y = letters[1:5])
df2 <- data.frame(x = 1:15, y = letters[1:15])
df3 <- data.frame(x = 1:25, y = letters[1:25])
df4 <- data.frame(x = 1:6, y = letters[1:6])
df5 <- data.frame(x = 1:8, y = letters[1:8])

l1 <- list(df1, df2)
l2 <- list(df3, df4, df5)
mylist <- list(l1, l2)
Run Code Online (Sandbox Code Playgroud)

我想计算我的列表中的数据帧总数(答案应该是 5,因为我总共有 5 个数据帧)。

r list lapply

7
推荐指数
1
解决办法
271
查看次数

在没有 recursive=FALSE 的情况下展平列表的列表

我有一个列表,其中包含一些其他列表,但也包含非列表的其他对象,例如数据框。我想将其展平为单个列表,但通常的建议(请参阅如何展平列表列表?将列表列表转换为单个列表)将unlist(..., recursive = FALSE)不起作用,因为它data.frame也可以在 上运行。

> d <- list(list(a = 1, b = 2), c = data.frame(1:4))
> d
[[1]]
[[1]]$a
[1] 1

[[1]]$b
[1] 2


$c
  X1.4
1    1
2    2
3    3
4    4
> unlist(d, recursive = FALSE)
$a
[1] 1

$b
[1] 2

$c.X1.4
[1] 1 2 3 4
Run Code Online (Sandbox Code Playgroud)

预期的结果是$c保留相同的data.frame结构。

到目前为止,我唯一的解决方案是在unlisting 之前向所有非列表对象添加一个额外的列表层,但这是一个非常不优雅的解决方案。

> unlist(lapply(d, function(x) if(!inherits(x, "list")) list(x) else x), recursive = …
Run Code Online (Sandbox Code Playgroud)

r list nested-lists

6
推荐指数
1
解决办法
222
查看次数