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 не дает одно и то же имя для значения по умолчанию?

  • Есть ли такой «colsd» в R?
  • Разверните строки по дате с использованием даты начала и окончания
  • R усиливает местный охват
  • Функция очистки консоли в R и RStudio
  • R Ошибка в операторе x $ ed: $ недействительна для атомных векторов
  • Что делает функция «pol» на самом деле?
  • Почему некоторые символы Юникода отображаются в matrixх, но не в кадрах данных в R?
  • Функция не найдена в R doParallel 'foreach' - Ошибка в {: task 1 failed - "не удалось найти функцию" растровый "
  • Как мне назвать столбец имен строк в r
  • Как я могу прерывать текущий код в R с помощью команды клавиатуры?
  • Как суммировать числовые элементы списка
  • Interesting Posts

    Когда происходит «запуск системы», если используется планировщик заданий с параметром / sc onstart?

    Android ImageView Масштабирование и переводческая проблема

    как правильно использовать insertRowsAtIndexPaths?

    Разница между & function и функцией () в perl

    У Microsoft по-прежнему есть ссылка для загрузки IE10 для Windows 7?

    Лучший способ заставить NSRunLoop ждать установки флага?

    Как сохранить видео в VLC с использованием фильтров

    Строгое выражение инициализации массива?

    Как получить уникальный идентификатор компьютера в Java (например, идентификатор диска или идентификатор материнской платы)?

    CentOS localhost работает только при подключении к интернету

    Как отобразить вывод данных float с 2 десятичными знаками в Java?

    В чем преимущества использования единой базы данных для клиента EACH?

    Как заблокировать файл с помощью java (если возможно)

    Получение предупреждения «Использование двухступенчатой ​​анимации вращения» с помощью UIImagePickerController

    Настройка разрешений VSFTPD с сервера Apache

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