gpt4 book ai didi

r - R 中的压缩列表

转载 作者:行者123 更新时间:2023-12-03 01:46:37 25 4
gpt4 key购买 nike

作为指导,我更喜欢使用 lapply 或 *ply (来自 plyr)将函数应用于列表的元素,而不是显式地迭代它们。然而,当我必须一次处理一个列表时,这种方法很有效。当函数接受多个参数时,我通常会执行一个循环。

我想知道是否有可能有一个更干净的结构,但本质上仍然有效。一种可能的方法是定义一个类似于 Python 的函数 zip(x,y),它接受输入列表,并返回一个列表,其第 i 个元素是 list(x, y),然后将该函数应用于这份 list 。但我的问题是我是否使用了最干净的方法。我不担心性能优化,而是担心清晰度/优雅。

下面是一个简单的例子。

        A <- as.list(0:9)
B <- as.list(0:9)
f <- function(x, y) x^2+y

OUT <- list()
for (n in 1:10) OUT[[n]] <- f(A[[n]], B[[n]])
OUT
[[1]]
[1] 0

[[2]]
[1] 2

...

这是压缩的示例(可以扩展到任意参数):

zip <- function(x, y){
stopifnot(length(x)==length(y))
z <- list()
for (i in seq_along(x)){
z[[i]] <- list(x[[i]], y[[i]])
}
z
}
E <- zip(A, B)

lapply(E, function(x) f(x[[1]], x[[2]]))

[[1]]
[1] 0

[[2]]
[1] 2

...

最佳答案

我认为您正在寻找mapply:

   ‘mapply’ is a multivariate version of ‘sapply’.  ‘mapply’ applies
‘FUN’ to the first elements of each ... argument, the second
elements, the third elements, and so on. Arguments are recycled
if necessary.

对于您的示例,请使用maply(f, A, B)

关于r - R 中的压缩列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6145795/

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