Простой синтаксический вопрос относительно «f». в р

Я читал этот SO-пост здесь, и решение было получено в виде этого блока кода 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) {  ## 1. note f.
   exp(-f.(x)/T) 
}
 
test<- function(g. = g, T = 1) {  ## 2. note g.
   g.(1,T) 
}
 
test()
## [1] 8.560335e-37

Я просто хотел бы немного объяснить синтаксис в определениях функций g и test, где автор отмечает f. и g. Я видел такие вещи, как .f и .g, как при использовании map или что-то в этом роде, но я не видел . идут после. Я пробовал гуглить, но моя неспособность определить, что это было на самом деле, привело к плохим результатам. Я полагаю, что это как-то связано с рекурсией? Я не знаю.

Я считаю, что вы видите разницу между тем, что называется функцией, и «функционалом». Точка должна указать, что параметр не является объектом (как в переменной), а является другой функцией. Использование .f в чем-то вроде map кодируется как входной параметр. В то время как в базе R функция в качестве параметра вызывается с использованием f. (или любого другого имени функции).

Kat 17.03.2022 03:18

@Kat У вас есть пример, в котором база R использует суффиксные точки специально для аргументов функции? Как правило, нет, и я не могу вспомнить ни одного примера. Большинство используют либо FUN, либо обычные названия функций (например, f). В любом случае, ваш комментарий потенциально может ввести в заблуждение, поскольку подразумевает, что параметры, привязанные к функциям, не являются переменными, но, конечно, они являются обычными переменными находятся. И «purrr» также не использует префикс-точку для обозначения функций — он просто использует точки для аргументов все в (ошибочной ИМХО) попытке отличить их от именованных аргументов, пересылаемых через ....

Konrad Rudolph 17.03.2022 09:53

@Kat Мне действительно стало любопытно, поэтому я посмотрел аргументы функции все в базе R (используя скрипт). Есть экземпляры нет параметров функций, относящихся к функциям, оканчивающимся на .. Некоторые имена параметров заканчиваются на . (например, параметр call. на stop), но ни одно из них не связано с функциями.

Konrad Rudolph 17.03.2022 10:14
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
3
21
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Точка в конце не влияет на синтаксис, она такая же, как и любой другой допустимый символ в идентификаторе. Точка в начале имеет очень небольшой эффект, но это означает, что ls() не будет отображать переменную по умолчанию.

В опубликованных вами примерах автор, вероятно, использовал f., чтобы напомнить читателю, что значением по умолчанию было f, а g. напоминает читателю о g.

Частичное сопоставление аргументов означает, что пользователь может написать test(g = somefn), а R будет рассматривать somefn как значение аргумента g..

В упомянутом вопросе, где вы видели этот код, исходная функция имела заголовок

g <- function(x, T, f=f) {

Это не сработает, потому что значение по умолчанию имеет то же имя, что и аргумент, а значения по умолчанию оцениваются во фрейме функции. Итак, он говорит: «Если аргумент f не указан, установите его в качестве аргумента f». Это бессмысленно. В опубликованной вами исправленной версии говорится: «Если аргумент f. не указан, установите его в глобальную переменную f».

Другие вопросы по теме