Вызов функции не выполняется - PullRequest
1 голос
/ 09 октября 2019

Я написал функцию, которая вычисляет расстояние между 2 векторами. И ниже его код.

myfu <- function(a=c(a,b),b=c(c,d))
{
res <- sqrt((d^2-b^2)-(c^2-a^2))
return(res)}

Но когда я вызываю значения для функции, она выдает ошибку. Пожалуйста, объясните мне, что я здесь делаю неправильно.

myfu(x=c(1,2),y=c(5,8))
Error in myfu(x = c(1, 2), y = c(5, 8)) : object 'd' not found

Ответы [ 2 ]

3 голосов
/ 09 октября 2019

Когда вы говорите a=c(a,b), b = c(c,d), вы даете значения по умолчанию для ваших двух аргументов. Ваша функция знает только a и b, а не заданные вами аргументы по умолчанию. Я думаю, что ответ @ neilfws сработает, или вы можете также индексировать a и b следующим образом:

myfu <- function(a, b){
  # check a and b length
  if (length(a) !=2 & length(b) != 2)
    return(NA)
  res <- sqrt((b[2]^2-a[2]^2)-(b[1]^2-a[1]^2))
  return(res)}
2 голосов
/ 09 октября 2019

Если вы хотите передать аргументы как векторы, вы можете использовать

myfu1 <- function(a, b) {
      sqrt(diff((b^2 - a^2)))
}

myfu1(c(1, 2), c(5, 8))
#[1] 6

myfu1(c(1, 2), c(6, 8))
#[1] 5
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...