使函数接受R中的向量

时间:2014-03-24 01:20:55

标签: r vectorization

我有36个文件,其中每个文件包含特定年份的一个月的数据,因此我总共有36/12 = 3年。 1到12的文件是2013年,2012年是13到24,2011年是25到36.我正在尝试创建一个以一年或几年为参数的函数,并返回相应的文件编号间隔。我的尝试:

g<-function(year){
 lis<-vector()
 for( i in year){
  if(year==2013){lis<-append(lis,1:12)}
  if(year==2012){lis<-append(lis,13:24)}
  if(year==2011){lis<-append(lis,24:36)}
 }
return(lis)
}

单身年我的功能很好。例如:

> g(2013)
[1]  1  2  3  4  5  6  7  8  9 10 11 12

当我致电g(2013:2012)g(2012:2013)时,我想要以下输出:

[1]  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24

我认为if语句会起作用,但它不起作用。如果您需要任何澄清,请告诉我。谢谢你的帮助。

1 个答案:

答案 0 :(得分:2)

在for循环中,实际上并没有使用循环的单个值,而是每次都与整个year向量进行比较。使用单个值可以解决您的紧急问题:

g<-function(year){
  lis<-vector()
  for( i in year){
    if(i == 2013){lis<-append(lis,1:12)}
    if(i == 2012){lis<-append(lis,13:24)}
    if(i == 2011){lis<-append(lis,24:36)}
  }
  return(lis)
}

或者你可以在没有for循环的情况下做同样的事情:

g2 <-function(year){
  lis<-vector()
  if (2013 %in% year) {lis <- append(lis, 1:12)}
  if (2012 %in% year) {lis <- append(lis, 13:24)}
  if (2011 %in% year) {lis <- append(lis, 24:36)}
  return(lis)
}