построение функции, которая вычисляет элементы нескольких векторов - PullRequest
0 голосов
/ 12 ноября 2018

Вход содержит 3 вектора (X, R, N) Я хочу создать новый вектор, в котором для каждого элемента выполняется вычисление с использованием соответствующих элементов в векторах X, R, N, вычисление X * (1 + R / 100) ^ N Я попробовал:

q4 = function(X, R, N) {

  tot <- X*(1+R/100)^N

}

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

Ответы [ 2 ]

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

Ваша функция работает нормально, как было упомянуто выше, даже без return. В первом случае, однако, он возвращает последний результат без вывода сообщений на консоль:

q4 = function(X, R, N) {
  tot <- X*(1+R/100)^N
}

set.seed(53260330)
x <- 1:10; y = 10:1; z = runif(10, 0, 10)

q4(x, y, z)

print(q4(x, y, z))
# [1] 1.843725  3.982180  3.230178  5.302991  6.178926  8.562266  ...

res <- q4(x, y, z)
res
# [1]  1.843725  3.982180  3.230178  5.302991  6.178926  8.562266  ...

Сравнить с той же функцией, но с возвратом:

q4_1 = function(X, R, N) {
  return(X*(1+R/100)^N)
}

q4_1(x, y, z)
# [1]  1.843725  3.982180  3.230178  5.302991  6.178926  8.562266  ...

Мое личное мнение: используйте return в теле вашей функции, если не для удобочитаемости, чем, по крайней мере, чтобы избежать такого неприятного опыта, когда функция, кажется, ничего не возвращает, а только потому, что она не беспокоит печать это собственный выход.

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

Ваша функция работает нормально, если вы не забыли вернуть вывод.

q4 <-  function(X, R, N) {
  tot <- X*(1+R/100)^N
  tot
}

X <- c(1, 3, 4, 6, 7, 9)
R <- c(3, 4, 6, 7, 9, 2)
N <- c(8, 7, 5, 4, 5, 1)

q4(X, R, N)
# 1.266770  3.947795  5.352902  7.864776 10.770368  9.180000

В R вы можете вернуть значение, используя return(). Это удобно, если у вас есть условный оператор, и одно условие позволяет вам вернуть значение раньше, но в большинстве случаев достаточно просто вызвать возвращаемый объект.

Позвольте мне продемонстрировать.

q5 <-  function(X, R, N) {
  if (missing(N)) {
    return(X*(1+R/100))
  }
  tot <- X*(1+R/100)^N
  tot
}

q5(X, R)
# 1.03 3.12 4.24 6.42 7.63 9.18

Вещи после return() не будут оцениваться, вещи после tot будут.

q6 <-  function(X, R, N) {
  if (missing(N)) {
    return(X*(1+R/100))
    1 + 2
  }
  tot <- X*(1+R/100)^N
  tot
  1 + 2
}

q6(X, R)
# 1.03 3.12 4.24 6.42 7.63 9.18

q6(X, R, N)
# 3
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...