gpt4 book ai didi

r中的递归和加乘积

转载 作者:行者123 更新时间:2023-12-02 07:27:56 26 4
gpt4 key购买 nike

我在 R 中有一个数据框,它由两个(数字)列组成,比如 A 和 B。我想构造由元素组成的列

  A1+B1
(A1+B1)*A2+B2
((A1+B1)*A2+B2)*A3+B3
...

这可能是一个简单的单行代码,但我没有看到。

编辑:从标题中删除了向量化一词,因为我基本上只对任何优雅的解决方案感兴趣(我可以自己做的愚蠢的解决方案)。在我更熟悉的 F# 中,这将类似于(假设元素将作为元组在列表中,这将更加惯用):

ABlist |> List.fold (fun acc (a,b) -> acc*a+b) 1

这仍然是非常简短明了的东西。我把它拖了上来,因为我是一个 R 菜鸟而且不熟悉它,但我在某处读到它是一种函数式语言,所以我猜会存在一个折叠数据框的解决方案?

最佳答案

这是一个不同的答案,原因是 Bram 在使用 Reduce 方面的努力失败了。它构建一个包含 A;B 对的列表,然后将累加器的初始值设置为 1,以便第一个乘法不会被清零:

abList <- mapply(c, A,B, SIMPLIFY=FALSE)  # keeps as a list
Reduce( function(acc,x) {acc*x[1]+x[2]},
abList,init=c(1,0),
accumulate=TRUE)[-1] # removes the initialization value
#--------
[[1]]
[1] 4 3

[[2]]
[1] 10 8

[[3]]
[1] 31 25

[[4]]
[1] 128 104

[[5]]
[1] 645 525

可能需要进一步使用 s/lapply( ..., "[", 1) 来取出累加器

> sapply( Reduce( function(acc,x) {acc*x[1]+x[2]},
+ abList,init=c(1,0),
+ accumulate=TRUE)[-1], "[", 1)
[1] 4 10 31 128 645

关于r中的递归和加乘积,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25752718/

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