如何将向量作为变量输入到函数?

时间:2019-03-30 23:55:42

标签: r

在我的一项作业中,要求我打印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 :(得分:0)

让我们假设您不是function(c(2015,2016,2017,2018),而是plt(c(2015,2016,2017,2018)。如果我错了,我将删除答案。

让我们启动该功能。在这种情况下,a == c(2015, 2016, 2017, 2018)

在您要求的功能中,执行a == 2015。不,不是的; a是长度为4的向量,如上所示。 r中的2015是标量或长度为1的向量。

a == 2016是吗?否,2017年和2018年也是如此。因此,如果满足条件,则所有条件都不成立,因此您的plot()无法正常工作,因为从未创建x

相反,您可能想重写代码以使用a并处理每个元素。 另外,您可能想通过创建来简化 a_length <- c(252, 252, 251, 205),而不是将所有内容都写出来。

此时,您可以使用for循环或lapply()来获取绘图。