R: Установка параметров функции путем составления ее с другой функцией - PullRequest
2 голосов
/ 22 апреля 2020

Есть ли способ заставить следующую идею кода работать в R без определения f как функции от x и a?

f=function(x) a*x
g=function(y){
  a=2
  return(f(y))
}

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

Ответы [ 4 ]

2 голосов
/ 22 апреля 2020

В средах можно определить a в новой среде и вызвать f.

f <- function(x) a*x
g <- function(y){
  env <- new.env()
  env$a <- 2
  environment(f) <- env
  do.call(f, list(y), envir = env)
}
g(1:5)
#[1]  2  4  6  8 10

Обратите внимание, что среда f не изменилась.

environment(f)
#<environment: R_GlobalEnv>
1 голос
/ 22 апреля 2020

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

f <- function(a){
  return(function(x) a*x)
}

g <- f(2)

g(3)
0 голосов
/ 23 апреля 2020

Теперь я использовал оператор superassignment, который работал для моих целей.

f=function(x) a*x
g=function(y){
  a<<-2
  return(f(y))
}
0 голосов
/ 22 апреля 2020

Я не уверен, что код ниже для вашей цели

f <- function(...) prod(...)
g <- function(...) f(c(a=2,...))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...