将模式匹配参数化为R中的函数参数

时间:2014-08-30 08:46:00

标签: regex r csv zoo

我有一个包含csv文件的目录,大小约为12k,命名格式为

 YYYY-MM-DD<TICK>.csv

<TICK>是指股票的股票代码,例如MSFT,GS,QQQ等共有500种不同长度的代码。 我的目标是将所有csv合并为特定的刻度,并将其作为动物园对象保存在单独的目录中的单个RData文件中。

为了实现自动化,我设法进行了csv操作,设置为一个函数,它将一个代码作为输入,完成所有数据修改。但我仍然坚持制作文件列表阶段,传递模式以匹配正在处理的代码。我无法根据股票代码使模式匹配。

以下是我尝试过的功能,不起作用:

csvlist2zoo <- function(symbol){
  csvlist=list.files(path = "D:/dataset/",pattern=paste("'.*?",symbol,".csv'",sep=""),full.names=T)
}

这样可行,但无法使其在功能

中起作用
csvlist2zoo <- function(symbol){
  csvlist=list.files(path = "D:/dataset/",pattern='.*?"ibm.csv',sep=""),full.names=T) 
}

在SO中搜索,有类似的问题,不完全符合我的要求。但如果我错过了什么,请指出正确的方向。还在与正则表达式作斗争。

操作系统:Win8 64位,R版本3.1.0(如果需要)

1 个答案:

答案 0 :(得分:1)

尝试:

  csvlist2zoo <- function(symbol){
  list.files(pattern=paste0('\\d{4}-\\d{2}-\\d{2}',symbol, ".csv"))
  }

  csvlist2zoo("QQQ")
 #[1] "2002-12-19QQQ.csv" "2008-01-25QQQ.csv"

 csvlist2zoo("GS")
 #[1] "2005-05-18GS.csv"

我在工作目录(linux)中创建了一些文件

 v1 <- c("2001-05-17MSFT.csv", "2005-05-18GS.csv", "2002-12-19QQQ.csv", "2008-01-25QQQ.csv")
 lapply(v1, function(x) write.csv(1:3, file=x))

更新

使用paste

 csvlist2zoo <- function(symbol){
 list.files(pattern=paste('\\d{4}-\\d{2}-\\d{2}',symbol, ".csv", sep=""))
 }
csvlist2zoo("QQQ")
#[1] "2002-12-19QQQ.csv" "2008-01-25QQQ.csv"