gpt4 book ai didi

r - 在哪里处理缺失的点 (`...` )?

转载 作者:行者123 更新时间:2023-12-04 00:58:14 24 4
gpt4 key购买 nike

如果我们查看具有点 ... 的函数体在它的参数列表中,我们通常可以找到接收这些点参数的函数。

例如,我们可以在 sapply() 的正文中看到点参数传递给 lapply() .

sapply
# function (X, FUN, ..., simplify = TRUE, USE.NAMES = TRUE)
# {
# FUN <- match.fun(FUN)
# answer <- lapply(X = X, FUN = FUN, ...)
# ## rest of function body
# }
# <bytecode: 0x000000000e05f0b0>
# environment: namespace:base>

然而,在 lapply() ,有点 ...在参数列表中,但 不是 在函数体中。
lapply
# function (X, FUN, ...)
# {
# FUN <- match.fun(FUN)
# if (!is.vector(X) || is.object(X))
# X <- as.list(X)
# .Internal(lapply(X, FUN))
# }
# <bytecode: 0x0000000009414f08>
# <environment: namespace:base>

那么点在哪里 ... lapply() 中的参数得到处理?它们被传递到什么/哪里?我们无法将它们传递给 match.fun() .我认为它们被传递到 .Internal()但是当我没有看到它们传递到函数体中的任何函数时,我看不出有任何理由这样做。

最佳答案

它们没有明确传递给 .Internal ,但我相信它们可用于 do_lapply (在 src/main/apply.c 中)通过动态范围。范围规则可能与平常略有不同,因为 .Internal是一个原始函数。

你可以看到 ... ( R_DotsSymbol ) 添加到函数调用 lapply创建,因此它们可用于每个列表元素上的函数调用。 tmp大致相当于 X[[i]]R_fcall大致相当于 FUN(X[[i]], ...) .

SEXP tmp = PROTECT(LCONS(R_Bracket2Symbol,
LCONS(X, LCONS(isym, R_NilValue))));
SEXP R_fcall = PROTECT(LCONS(FUN,
LCONS(tmp, LCONS(R_DotsSymbol, R_NilValue))));

关于r - 在哪里处理缺失的点 (`...` )?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32030656/

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