ls()有一个模式> 1?

时间:2016-07-11 10:31:27

标签: r ls

假设我有10个data.frame个名称中的日期,从01-01-0010-01-00,其他字母和符号以ddmmyy格式添加到结尾p>

例如 010100/sgh/d_3020100/aff/d_1

如果我想创建上述data.frame的向量,有没有办法选择它们而不单独写出来?

我尝试创建一个日期序列的向量并将其放入pattern =但是出现了错误(下面的代码):

Dates <- seq(as.Date("2000-01-01"),as.Date("2000-01-02"),1)
Dates <- format(Dates,"%d%m%y")
ls(pattern=Dates)

In grep(pattern, all.names, value = TRUE) :
  argument 'pattern' has length > 1 and only the first element will be used

我假设该模式只能是一个值?

1 个答案:

答案 0 :(得分:1)

创建一个匹配您想要的任何日期字符串的模式。一种方法是使用|字符加入所有字符串:

> Dates <- seq(as.Date("2000-01-01"),as.Date("2000-01-10"),1)
> Dates
 [1] "2000-01-01" "2000-01-02" "2000-01-03" "2000-01-04" "2000-01-05"
 [6] "2000-01-06" "2000-01-07" "2000-01-08" "2000-01-09" "2000-01-10"
> D2 = paste(Dates,collapse="|")
> D2
[1] "2000-01-01|2000-01-02|2000-01-03|2000-01-04|2000-01-05|2000-01-06|2000-01-07|2000-01-08|2000-01-09|2000-01-10"

现在我的工作区中有各种各样的部分:

> ls()
 [1] "d"              "d010100foo"     "d010110bar"     "D2"            
 [5] "d2000-01-01bar" "d2000-01-10bar" "d2000-02-10foo" "Dates"         
 [9] "dorig"          "j"              "p"              "x"             
[13] "y"              "z"             

但如果我使用那种模式,我会得到与日期匹配的模式:

> ls(pattern=D2)
[1] "d2000-01-01bar" "d2000-01-10bar"

如果你有很多东西需要匹配,这可能会变得笨拙,但是那一点你可以编写一个更简单的正则表达式来匹配所有的东西 - 像[0-9]{4}-[0-9]{2}-[0-9]{2}(未经测试的)应该匹配任何四位数,短划线,两位数,短划线,两位数序列。

调整图案以匹配您的日期格式。建议不要使用您使用的格式:https://xkcd.com/1179/