promise уже оценивается: рекурсивный аргумент аргумента по умолчанию или более ранние проблемы?

Вот мой код R. Функции определяются как:

f <- function(x, T) { 10 * sin(0.3 * x) * sin(1.3 * x ^ 2) + 0.001 * x ^ 3 + 0.2 * x + 80 } g <- function(x, T, f=f) { exp(-f(x) / T) } test <- function(g=g, T=1) { g(1, T) } 

Ошибка выполнения:

> test ()
Ошибка в тесте ():
promise уже оценивается: рекурсивный аргумент аргумента по умолчанию или более ранние проблемы?

Если подставить определение f в значение g , то ошибка исчезнет.

Мне было интересно, что это за ошибка? Как исправить это, если не подставить определение f в определение g ? Благодаря!


Обновить:

Благодаря! Два вопроса:

(1) если функция test далее принимает аргумент для f , вы добавите что-то вроде test <- function(g.=g, T=1, f..=f){ g.(1,T, f.=f..) } ? В случаях с большим количеством рекурсий, это хорошая и безопасная практика, добавляющая больше . ?

(2) если f – нефункциональный аргумент, например g <- function(x, T, f=f){ exp(-f*x/T) } и test <- function(g.=g, T=1, f=f){ g.(1,T, f=f.) } , Будет использовать одно и то же имя для формальных и фактических нефункциональных аргументов в хорошей и безопасной практике или это может вызвать некоторые потенциальные проблемы?

Формальные аргументы формы x=x вызывают это. Исключая два случая, когда они происходят, мы получаем:

 f <- function(x, T) { 10 * sin(0.3 * x) * sin(1.3 * x^2) + 0.001 * x^3 + 0.2 * x + 80 } g <- function(x, T, f. = f) { ## 1. note f. exp(-f.(x)/T) } test<- function(g. = g, T = 1) { ## 2. note gg(1,T) } test() ## [1] 8.560335e-37 

Та же проблема, имя значения по умолчанию, в более простой функции:

 f1=function(df1,tr=tr){ print(tail(tr)) } df1=data.frame() f1(df1) Error in tail(tr) : promise already under evaluation: recursive default argument reference or earlier problems? 

Одно решение просто назначает tr явно:

  f1(df1,tr) nu_pregao cd_papel true_range pc_true_range mdTr13 sdTr13 mdTr21 sdTr21 70315 1781 AGRO3 0.25 0.019 0.01492308 0.005880215 0.01628571 0.006709269 70316 1781 AELP3 0.47 0.157 0.04223077 0.041219239 0.06061905 0.055112137 70317 1781 ADHM3 0.05 0.026 0.03469231 0.014912996 0.02976190 0.014542712 70318 1781 ABEV3 0.52 0.022 0.02176923 0.006610016 0.02204762 0.008639885 70319 1781 ABCB4 0.69 0.037 0.02838462 0.010444604 0.02585714 0.009456668 70320 1781 AALR3 0.71 0.042 0.02700000 0.010885771 0.02466667 0.010184956 

Другое решение – просто изменить имя параметра:

 f2=function(df1,tr1=tr){ print(tail(tr1)) } f2(df1) nu_pregao cd_papel true_range pc_true_range mdTr13 sdTr13 mdTr21 sdTr21 70315 1781 AGRO3 0.25 0.019 0.01492308 0.005880215 0.01628571 0.006709269 70316 1781 AELP3 0.47 0.157 0.04223077 0.041219239 0.06061905 0.055112137 70317 1781 ADHM3 0.05 0.026 0.03469231 0.014912996 0.02976190 0.014542712 70318 1781 ABEV3 0.52 0.022 0.02176923 0.006610016 0.02204762 0.008639885 70319 1781 ABCB4 0.69 0.037 0.02838462 0.010444604 0.02585714 0.009456668 70320 1781 AALR3 0.71 0.042 0.02700000 0.010885771 0.02466667 0.010184956 

Почему R не дает одно и то же имя для значения по умолчанию?

  • R: неверная многобайтовая строка
  • Перекодирование переменных с помощью R
  • Добавить переменную в кадр данных, содержащий максимальное значение каждой строки
  • нумерация по группам
  • индекс возврата из вектора значения, ближайшего к данному элементу
  • Автоматическое расширение R-фактора в набор переменных индикатора 1/0 для каждого уровня фактора
  • Какой самый полезный трюк?
  • Максимальная длина для вектора в R
  • Процент% в%
  • Преобразование серийного номера excel DateTime в R DateTime
  • Напишите много файлов в цикле for
  • Interesting Posts

    Могу ли я использовать косую черту в диалоговом окне открытия файла Windows?

    Импортирование вложенных пространств имен автоматически в C #

    Как написать вывод консоли в txt-файл

    Пусть Firefox автоматически примет диалог «требуется проверка подлинности»

    Разбор CN из сертификата DN

    Именование streamов и streamов-streamов ExecutorService

    Могу ли я создать RAM-диск с использованием памяти GPU?

    Почему Thunar не создает и не показывает миниатюры изображений?

    Gradle Не удалось HEAD https: //..pom> peer not authenticated

    Как я могу разрешить локальные адреса в Windows?

    Путаница обнаружения столкновений прямоугольника Java

    Как создать документ в Документах Google программно?

    Не удается подключиться к FTP-серверу: 425 Не удалось создать подключение к данным: время ожидания подключения

    Сравнение использования памяти в браузере: встроенный onClick против использования JQuery .bind ()

    Преобразование одного цвета с помощью cvtColor

    Давайте будем гением компьютера.