Remove/select a 一些在 R 中名称末尾带有序列号的对象
Remove/select a some objects with sequence number at the end of their name in R
如何在 R 中快速删除 (rm
) 或 select (ls
) 带序列号的对象名称?
在下面的示例中,我只想删除 a1-a3。
a<-c(1:3)
a1<-c(4:6)
a2<-c(7:9)
a3<-c(10:12)
ab1c<-c(paste0("x", 1:3))
ab1c1<-c(paste0("x", 4:6))
ab1c2<-c(paste0("x", 7:9))
ab2c1<-c(1:5)
ab2c2<-c(2:6)
我知道要快速删除一些对象,我们使用类似的东西:
rm(list=ls(pattern="^a"))
rm(list=ls(pattern="1$"))
但是,^
select 的模式所有变量都以“a”开头,$
select 的模式所有变量都以“1”开头" 作为他们名字中的最后一个字符,而我只想删除其中的一些。
ls(pattern="^a")
[1] "a" "a1" "a2" "ab1c" "ab1c1" "ab1c2"
ls(pattern="1$")
[1] "a1" "ab1c1"
#what I want:
[1] "a1" "a2" "a3"
我是 R 的新手,大概两天前才知道我的问题很可能与正则表达式 (regex) 有关。我开始学习正则表达式,但仍然没有找到如何 select 一些名称具有连续序列号的对象的方法。我尝试使用 pattern="1:3"
之类的东西,但显然,它不起作用。
请建议如何 select 一些对象名称中包含序列数字模式。如果对象名称中的数字字符没有这样的表达式,请提出最快的解决方案以将它们从全局环境中快速删除。
谢谢。
编辑(在 Wiktor Stribiżew 的评论之后):
我也想知道我们是否可以在模式中添加一些criteria/argument。
例如,我只想select“ab1c1”和“ab1c2”。我们可以添加一些条件,例如“^a”、“b1”、[1-2]$ 吗?我也在问这个,因为有时数字也在名字的中间(有时我也想 select 通过中间字符)。
我假设您想删除那些以 a
开头然后可以有 1
、2
或 3
的变量,然后没有其他变量(即结束字符串将跟随)。
然后,您可以简单地使用 ^a[1-3]$
。
如果要查找以 a
开头并以 1
、2
或 3
结尾的变量名称,请使用 ^a.*[1-3]$
。
查看 R 测试:
> a<-c(1:3)
> a1<-c(4:6)
> a2<-c(7:9)
> a3<-c(10:12)
> ab1c<-c(paste0("x", 1:3))
> ab1c1<-c(paste0("x", 4:6))
> ab2c2<-c(paste0("x", 7:9))
> ls(pattern="^a")
[1] "a" "a1" "a2" "a3" "ab1c" "ab1c1" "ab2c2"
> rm(list=ls(pattern="^a[1-3]$"))
> ls(pattern="^a")
[1] "a" "ab1c" "ab1c1" "ab2c2"
如何在 R 中快速删除 (rm
) 或 select (ls
) 带序列号的对象名称?
在下面的示例中,我只想删除 a1-a3。
a<-c(1:3)
a1<-c(4:6)
a2<-c(7:9)
a3<-c(10:12)
ab1c<-c(paste0("x", 1:3))
ab1c1<-c(paste0("x", 4:6))
ab1c2<-c(paste0("x", 7:9))
ab2c1<-c(1:5)
ab2c2<-c(2:6)
我知道要快速删除一些对象,我们使用类似的东西:
rm(list=ls(pattern="^a"))
rm(list=ls(pattern="1$"))
但是,^
select 的模式所有变量都以“a”开头,$
select 的模式所有变量都以“1”开头" 作为他们名字中的最后一个字符,而我只想删除其中的一些。
ls(pattern="^a")
[1] "a" "a1" "a2" "ab1c" "ab1c1" "ab1c2"
ls(pattern="1$")
[1] "a1" "ab1c1"
#what I want:
[1] "a1" "a2" "a3"
我是 R 的新手,大概两天前才知道我的问题很可能与正则表达式 (regex) 有关。我开始学习正则表达式,但仍然没有找到如何 select 一些名称具有连续序列号的对象的方法。我尝试使用 pattern="1:3"
之类的东西,但显然,它不起作用。
请建议如何 select 一些对象名称中包含序列数字模式。如果对象名称中的数字字符没有这样的表达式,请提出最快的解决方案以将它们从全局环境中快速删除。
谢谢。
编辑(在 Wiktor Stribiżew 的评论之后):
我也想知道我们是否可以在模式中添加一些criteria/argument。 例如,我只想select“ab1c1”和“ab1c2”。我们可以添加一些条件,例如“^a”、“b1”、[1-2]$ 吗?我也在问这个,因为有时数字也在名字的中间(有时我也想 select 通过中间字符)。
我假设您想删除那些以 a
开头然后可以有 1
、2
或 3
的变量,然后没有其他变量(即结束字符串将跟随)。
然后,您可以简单地使用 ^a[1-3]$
。
如果要查找以 a
开头并以 1
、2
或 3
结尾的变量名称,请使用 ^a.*[1-3]$
。
查看 R 测试:
> a<-c(1:3)
> a1<-c(4:6)
> a2<-c(7:9)
> a3<-c(10:12)
> ab1c<-c(paste0("x", 1:3))
> ab1c1<-c(paste0("x", 4:6))
> ab2c2<-c(paste0("x", 7:9))
> ls(pattern="^a")
[1] "a" "a1" "a2" "a3" "ab1c" "ab1c1" "ab2c2"
> rm(list=ls(pattern="^a[1-3]$"))
> ls(pattern="^a")
[1] "a" "ab1c" "ab1c1" "ab2c2"