gpt4 book ai didi

r - 是否有与 Python 的 '*' 等效的 R?

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

在python中你可以这样做:

val = [1, 2, 3]

def f(a, b, c):
return(a+b+c)

f(*val)

>>>6

但是是否有一个 R 相当于将一个列表/向量传递给一个函数并让它解包列表/向量作为函数的参数?
val <- c(1, 2, 3)
f <- function(a,
b,
c) {
a+b+c
}
#f(*val)

最佳答案

碱基R

调用在 R 中是 do.call .第一个参数是函数或给出函数名称的字符串,第二个参数是一个列表,其组件将作为单独的参数传递给函数。不使用任何包。

val <- c(1, 2, 3)
f <- function(a, b, c) a+b+c
do.call("f", as.list(val))
## [1] 6

减少另一种方法是 curry f创建一个固定第一个参数的新函数,使用 Reduce 重复这样做处理每个连续的参数。不使用任何包。
Reduce(function(f, x, ...) function(...) f(x, ...), val, init = f)()
## [1] 6

咕噜包

调用 purrr 包有 invoke基本上只是调用 do.call但如果它还不是列表,它也会将第二个参数转换为列表:
library(purrr)
invoke(f, val)
## [1] 6

电梯 purrr 还有 lift这会将接受单个参数的函数转换为接受列表或向量的新函数。它还包含 do.call
lift(f)(val)
## [1] 6

部分 purrr 还有 partial这将 curry 函数创建一个新函数,其中第一个参数固定仅采用剩余参数,因此使用 reduce (也在 purrr 中)重复调用这样的柯里化(Currying):
reduce(val, partial, .init = f)()
## [1] 6

功能包

curry Curry功能包中的也可用于修复第一个参数。与 Reduce 一起使用时从基础 R 到重复应用 Curry它给出了相同的结果。请注意 Curry使用 do.call内部。
library(functional)
Reduce(Curry, init = f, val)()
## [1] 6

关于r - 是否有与 Python 的 '*' 等效的 R?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58416309/

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