gpt4 book ai didi

r - 如何在列表中循环并访问名称和属性?

转载 作者:行者123 更新时间:2023-12-04 04:13:12 25 4
gpt4 key购买 nike

我正在将一个函数应用于列表的元素。

列表中有 names ,所以从某种意义上说,每个元素都有自己的名字,但是我如何访问它一次 lapply函数已经从列表中提取/分离了元素?

一些虚构数据(作为内部函数,我在这里滥用 dput ):

r <- list(a=structure(1:4, unit="test"), b='abc')
lapply(r, dput)

我在这里观察到的是 dput接收列表中的对象,就像使用 [[ 访问一样, 剥夺了它们在包含列表中的名称。

所以我想我会放弃使用 apply 中的函数的想法family 并编写一个循环,但我不是特别喜欢这个想法,它迫使我构建完整函数的结果。
result <- list()
for (name in names(r)) {
print(name)
result[[name]] <- dput(r[[name]])
}
result

任何有见地的想法?

最佳答案

您可以在仍然使用 lapply 的同时模拟循环背后的想法, 通过将数字向量传递给 lapply然后使用它作为索引从你想要的列表中提取元素。这可能没有意义,但希望这个例子说明了我的意思:

lapply(seq_along(r), function(i)dput(r[i]))

structure(list(a = structure(1:4, unit = "test")), .Names = "a")
structure(list(b = "abc"), .Names = "b")
[[1]]
[[1]]$a
[1] 1 2 3 4
attr(,"unit")
[1] "test"



[[2]]
[[2]]$b
[1] "abc"

关键思想是 seq_along(x)返回与 x 长度相同的序列.例如:
> seq_along(r)
[1] 1 2

?seq_along了解更多详情。

编辑

这似乎比按名称索引快得多:
library(rbenchmark)
benchmark(
xx <- lapply(names(r), function(i)dput(r[i])),
yy <- lapply(seq_along(r), function(i)dput(r[i])),
replications=10000)

test replications elapsed relative user.self
1 xx <- lapply(names(r), function(i) dput(r[i])) 10000 1.95 1.026316 1.70
2 yy <- lapply(seq_along(r), function(i) dput(r[i])) 10000 1.90 1.000000 1.66
sys.self user.child sys.child
1 0.00 NA NA
2 0.01 NA NA

关于r - 如何在列表中循环并访问名称和属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7481522/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com