Как ввести вектор как переменную в функцию? - PullRequest
0 голосов
/ 31 марта 2019

В одном из моих домашних заданий меня просят напечатать цены облигации за 2015,2016,2017,2018. Начиная с 2015,2016 года 252 торговых дня, 2017 с 251 и 2018 с 250, мне нужно написать заявление if. Вот моя попытка:

plt <- function(a) {
  if (a == 2015) {
    x <- 1:252
  }
  else if (a == 2016) {
    x <- 1:252
  }
  else if (a == 2017) {
    x <- 1:251
  } else {
    x <- 1:250
  }
  plot(x=x, y=data[data$Year == a, 5], type="l", col="red")
}

Однако, когда я ввожу

function(c(2015, 2016, 2017, 2018))

отображается только черновик 2015 года, а R возвращает

Warning messages:
1: In if (a == 2015) { :
  the condition has length > 1 and only the first element will be used
2: In data$Year == a :
  longer object length is not a multiple of shorter object length  

Если я введу эти годы отдельно, это даст четыре идеальных графика.

1 Ответ

0 голосов
/ 31 марта 2019

Предположим, что вместо function(c(2015,2016,2017,2018) вы имеете в виду plt(c(2015,2016,2017,2018). Если я ошибаюсь, я удалю ответ.

Давайте начнем функцию. В этом случае a == c(2015, 2016, 2017, 2018).

В вашей функции вы спрашиваете, a == 2015. Нет; a - вектор длины 4, как показано выше. 2015 в r - скаляр или вектор длины 1.

Есть ли a == 2016? Нет и аналогично для 2017 и 2018. Так что ни одно из ваших условий if никогда не выполняется, и, следовательно, ваш plot() не может работать, потому что x никогда не создается.

Вместо этого вы можете захотеть переписать свой код, чтобы взять a и работать над каждым элементом. Также вы можете упростить, создав a_length <- c(252, 252, 251, 205) вместо того, чтобы писать все.

В этот момент вы можете использовать цикл for или lapply(), чтобы получить графики.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...