gpt4 book ai didi

r - 我可以删除 ... (dot-dot-dot) 中的元素并将其传递吗?

转载 作者:行者123 更新时间:2023-12-03 11:17:39 28 4
gpt4 key购买 nike

是否可以从 ... 中删除元素并将 ... 传递给其他函数?我的前两次尝试失败了:

parent = function(...)
{

a = list(...)
str(a)
a$toRemove = NULL
str(a)

# attempt 1
child(a)

# attempt 2
child( ... = a )
}


child = function(...)
{
a = list( ... )
str(a)
}

parent( a = 1 , toRemove = 2 )

编辑
很抱歉造成困惑。我修复了 child ()。目的是让 child 列出...的内容

编辑2
这里更多的是一个真实世界的例子(但仍然相当简单,所以我们可以就它进行有用的对话)。通过递归调用父级。父级需要知道递归调用的深度。父级之外的调用者不应该知道“深度”,也不应该在调用 parent() 时设置它。 Parent 调用其他函数,在本例中为 child()。 Child 需要值 in ... 显然 child 不需要“depth”,因为 parent 生成它供自己使用。
parent = function( ... )
{

depth = list(...)$depth
if ( is.null( depth ) )
{
depth = 1
}
print( depth )

# parent needs value of depth to perform various calculations (not shown here)

if ( depth == 5 )
{
return()
}
else
{
# child doesn't need "depth" in ...
child( ... )
}

# yikes! now we've added a second, third, etc. depth value to ...
parent( depth = depth + 1 , ... )

}


child = function(...)
{
# does some magic
}

最佳答案

操作这些东西的一种方法是包装 child内部函数parent , 并使用定义将您不想传递给 child 的任何参数。 ...争论。例如:

parent <- function(...) {
localChild <- function(..., toRemove) child(...)
localChild(...)
}
child <- function(a) {
a + 10
}

> parent(a = 1, toRemove = 10)
[1] 11

另一种方法是使用 do.call() :
parent2 <- function(...) {
a <- list(...)
a$toRemove <- NULL
do.call(child2, a)
}
child2 <- function(b) {
b + 10
}
> parent2(b = 1, toRemove = 10)
[1] 11

根据您的实际用例, do.call()可能最接近您对问题的意图。

关于r - 我可以删除 ... (dot-dot-dot) 中的元素并将其传递吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7028385/

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