У меня есть общий вопрос о передаче аргументов по умолчанию через вложенные функции в R. Мой пример (очевидно) - большое упрощение того, что я действительно хочу сделать, но у меня была проблема в других случаях, поэтому я ищуобщее решение.
В основном у меня есть три функции, и я хочу, чтобы у некоторых элементов были значения по умолчанию во всех трех.Эти функции вызываются друг в друга, но иногда вызываются по отдельности (то есть foo1
вызывает foo2
, а foo2
вызывает foo3
, но иногда я называю просто foo3
или foo2
).
Отредактировано, чтобы уточнить: я ищу способ передать wd
(и в моей реальной проблеме) несколько других переменных с уровня вызываемой функции, без необходимости записывать их в каждомвызов функции.То есть я хочу установить значение по умолчанию wd
на всех уровнях.Чтобы не называть их по-разному, это сбивает с толку, если вы хотите по отдельности вызывать функции, которые я пробовал, имея wd = wd
в вызове функции каждого (стремясь получить доступ к wd
из функции, которую он вызывает.Есть ли лучший способ передать аргумент так, чтобы при вызове внутри другой функции он передавал аргумент?
Мой первый пример работает, показывает рабочий код, однако каждый раз, когда я вызываю другие функции внутри одной, я имеючтобы указать, что wd = wd
, что, когда это число аргументов, и я вызываю функции несколько раз / в пределах ddply
, делает скрипт неудобным для работы.
Второй пример - это то, чем я былнадеясь, что в среде, из которой он был вызван, wd
по умолчанию установлено на wd
, но это, очевидно, не допускает появления ошибки. Каков наилучший подход к передаче аргумента без необходимости его постоянного присваивания?
Редактировать: я посмотрел на ответ на обещание ужеоценка: рекурсивная ссылка на аргумент по умолчанию или более ранние проблемы? и я знаю, что это возможный обходной путь (как я сейчас запускаю сценарий), но я действительно надеялся получить те же имена для аргументовкаждая функция, так что когда они вызываются по отдельности, быстро и легко запомнить имена аргументов.
Пример 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?