gpt4 book ai didi

r - 通过 R 中的嵌套函数传递默认参数

转载 作者:行者123 更新时间:2023-12-02 02:53:57 24 4
gpt4 key购买 nike

我有一个关于通过 R 中的嵌套函数传递默认参数的一般性问题。我的示例(显然)是对我实际想要做的事情的极大简化,但我在其他时候遇到过这个问题,所以我正在寻找一个通用的解决方案.

基本上我有三个函数,并且希望某些元素在所有三个函数中都有一个默认值。这些函数在彼此内部调用,但有时单独调用(即 foo1 调用 foo2foo2 调用 foo3 ,但有时我只调用 foo3foo2 )。

编辑以澄清:我正在寻找一种方法来通过 wd (在我真正的问题中)从被调用的函数级别通过其他一些变量,而不必在每个函数调用中将它们写出来。那就是我想设置默认值 wd在所有级别。为了避免将它们命名为所有不同的东西,如果您想单独调用我尝试使用的函数,这会造成混淆 wd = wd在每个函数调用中(旨在从它正在调用的函数中访问 wd。这给出了 promise already under evaluation: recursive default argument reference or earlier problems? 。有没有更好的方法来传递参数,以便在另一个函数中调用时传递参数?

我的第一个示例工作显示了工作代码,但是每次我调用其中的其他函数时,我都必须指定 wd = wd ,当它是多个参数时,我多次/在 ddply 内调用这些函数使脚本使用起来很麻烦。

第二个例子正是我所希望的,其中 wd默认设置为 wd在它被调用的环境中,但这显然不允许发生错误。传递参数而不必不断分配参数的最佳方法是什么?

编辑:我看过 promise already under evaluation: recursive default argument reference or earlier problems? 的答案并且我知道这是一种可能的解决方法(它是我目前运行脚本的方式),但我真的希望每个函数的参数都具有相同的名称,以便在单独调用它们时既快速又简单记住参数名称。

示例 1:工作正常,但没有设置默认值。

foo1 <- function(x, wd, reps){

filename = paste0("Event", x)
myString <- foo2(file = filename, wd = wd)
rep(myString, reps)
}

foo2 <- function(file,wd){
filePath <- file.path(wd,file)
foo3(Path = filePath, wd = wd)
}

foo3 <- function(Path, wd){
paste("Absolute File path is:", Path, "Current working Dir is:", wd)
}

foo1(1, wd = "c:/temp", 2)
foo2("C:/temp/otherfilename")

示例 2:
foo2 <- function(file,wd){
filePath <- file.path(wd,file)
foo3(Path = filePath)
}

foo3 <- function(Path, wd=wd){
paste("Absolute File path is:", Path, "Current working Dir is:", wd)
}
foo1(1, wd = "c:/temp", 2)
> Error in paste("Absolute File path is:", Path, "Current working Dir is:", :
promise already under evaluation: recursive default argument reference or earlier problems?

最佳答案

我认为您不应该尝试在不同环境中重复使用相同的名称。在 promise already under evaluation: recursive default argument reference or earlier problems? 建立一个可能重复的问题以及来自 http://adv-r.had.co.nz/Environments.html#function-envs 的一些解释:

为什么不在每个函数中使用单独的名称,如下所示:

foo1 <- function(x, wd. = wd, reps){
filename = paste0("Event", x)
myString <- foo2(file = filename, wd.. = wd.)
rep(myString, reps)
}

foo2 <- function(file, wd.. = wd){
filePath <- file.path(wd.., file)
foo3(Path = filePath)
}

foo3 <- function(Path, wd... = wd){
paste("Absolute File path is:", Path, "Current working Dir is:", wd...)
}

编辑以回应评论讨论。下面的代码可能会更好地实现您的意图并与您的测试调用一起使用 foo1(1, wd = "c:/temp", 2)foo2("C:/temp/otherfilename") :
foo1 <- function(x, ..., reps){
filename = paste0("Event", x)
myString <- foo2(file = filename, wd = wd)
rep(myString, reps)
}

foo2 <- function(file, ...){
filePath <- file.path(wd, file)
foo3(Path = filePath)
}

foo3 <- function(Path, ...){
paste("Absolute File path is:", Path, "Current working Dir is:", wd)
}

关于r - 通过 R 中的嵌套函数传递默认参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50499974/

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