установка значения аргумента функции по умолчанию в качестве значения переменной во время создания функции - PullRequest
0 голосов
/ 22 ноября 2018

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

Something like,
a=1
fn = function(arg1 = a) {
  print (arg1+1)
}

fn будет отображать

function(arg1 = 1) {
  print (arg1+1)
}

Ответы [ 2 ]

0 голосов
/ 22 ноября 2018

Помогает справка для функции bquote.Вот что я нашел для меня.

Мне это не кажется прямолинейным, но работает.

a=1
fn <- eval(bquote( function(arg1 = .(a)) {
    print (arg1+1)
} ))
fn
fn(3)

eval(bquote()) и .(a) - это главное.

Я нашел Hows, но не думаю, что полностью понял.Так что любой может помочь мне понять, как это работает, я буду рад принять это как ответ.

0 голосов
/ 22 ноября 2018

Один из способов сделать это - использовать глобальные параметры в R:

fn <- function(arg1 = getOption("arg1", 1)) {
     print(arg1 + 1)
}

fn() # returns 2
options(arg1 = 5)
fn() # returns 6
fn(2) # returns 3
options(arg1 = NULL)
fn() # returns 2 again

Я думаю, что вышеупомянутое решение более чистое по сравнению с использованием глобальной переменной в .GlobalEnv, но здесь вы также можете узнать, как это сделать.сделать это с глобальной переменной в .GlobalEnv:

fn2 <- function(arg1 = if( is.null(.GlobalEnv[["a"]]) ) 1 else .GlobalEnv[["a"]]) {
  print(arg1+1)
}

fn2() # this returns an empty vector
a <- 5
fn2() # this returns 6
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...