Установите значение по умолчанию для переменной, за которой следует переменная не по умолчанию - PullRequest
1 голос
/ 21 сентября 2019

Итак, у меня есть задание написать функцию R для расчета чистой приведенной стоимости.Требования идут следующим образом:

myNPV <- function(vector_cashflow, vector_year, interest_rate)...

Для присвоения требуется, чтобы эта функция работала независимо от того, введут ли пользователи vector_year и порядок переменных, если они точно такие же, как указано выше (vector_cashflow, vector_year, Interest_rate).Например:

myNPV(1000:3000,1:3,0.02) and myNPV(1000:3000,0.02)

работают так же.Я понятия не имею, как это может быть возможно?Я попытался установить vector_year = some_value, но, очевидно, делая это неоднозначно, хотят ли пользователи вводить vector_year или процентную ставку.

Ответы [ 2 ]

0 голосов
/ 21 сентября 2019

В этом случае может быть «приемлемо» проверить правильность аргумента на основе его диапазона: я предполагаю, что шкалы vector_year (1900+) и interest_rate (между 0 и 1?) Однозначноразные.Я нахожу предположения, подобные этому, хорошими, пока их нет ... и устранение неполадок такого рода может быть проблематичным.

myNPV <- function(vector_cashflow, vector_year, interest_rate) {
  if (missing(interest_rate)) {
    if (vector_year < 10) { # arbitrary, unlikely you're calculating for 2000 years ago
      interest_rate <- vector_year
      vector_year <- sane_default_value # this is up to you!
    } else {
      stop("'interest_rate' not provided and it is unsafe to guess based on the arguments")
    }
  }
  # rest of your code here ...
}
0 голосов
/ 21 сентября 2019

Да, вы можете передать vector_year в качестве необязательных аргументов.Поймайте их, используя c(...), и протестируйте их, используя is.null, и на этом основании вы можете выполнить дальнейшие вычисления.

myNPV <- function(vector_cashflow, interest_rate, ...) {
   vector_year <- c(...)
   if(is.null(vector_year)) {
     print("No Vector Year present")
     #Do something here
   }
   else {
     print("Vector Year present")
     #Do something else here
  }
}

myNPV(1000:3000,1:3)
#[1] "No Vector Year present"

myNPV(1000:3000,1:3, 10)
#[1] "Vector Year present"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...