1

如何快速删除(rm)或选择(ls)R中带有序列的编号对象名称?在下面的示例中,我只想删除 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$"))

但是,模式^选择所有具有初始字符“a”的$变量,模式选择所有以“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)有关。我开始学习正则表达式,但仍然没有运气找到如何选择一些名称具有连续序列号的对象。我尝试使用类似的东西pattern="1:3",但显然它不起作用。

请建议如何选择一些带有序列数字模式的对象名称。如果对象名称中的数字字符没有这样的表达式,请提出最快的解决方案,以便将它们从全局环境中快速删除。

谢谢你。

编辑(在 Wiktor Stribiżew 发表评论后):

我还想知道我们是否可以在模式中添加一些标准/参数。例如,我只想选择“ab1c1”和“ab1c2”。我们可以添加一些标准,如“^a”、“b1”、[1-2]$?我也在问这个,因为有时数字也在名字的中间(有时我也想通过中间字符来选择)。

4

1 回答 1

1

我假设您想删除那些以a然后可以有1,23, 然后没有其他变量的变量(即字符串的结尾将跟随)。

然后,您可以简单地使用^a[1-3]$.

如果要查找以,或开头a和结尾的变量名,请使用.123^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"
于 2021-06-24T19:10:08.697 回答