【问题标题】:Remove/select a some objects with sequence number at the end of their name in R删除/选择一些在R中名称末尾带有序列号的对象
【发布时间】:2021-06-24 18:43:32
【问题描述】:

如何快速删除(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]$?我也在问这个问题,因为有时数字也在名字的中间(有时我也想通过中间字符来选择)。

【问题讨论】:

    标签: r regex global-variables


    【解决方案1】:

    我假设您想删除那些以a 开头的变量,然后可以有123,然后什么都没有(即字符串结尾将跟随)。

    那么,你可以简单地使用^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"
    

    【讨论】:

    • 感谢您的回答。是的,它给出了我在原始问题中想要的结果。我不知道括号和连字符可以在模式中起到这样的作用。然而,实际情况却不同。使用这种模式,我只能选择一个紧跟数字的字符。很抱歉之前花了太长时间回复您的评论。我编辑了我的问题并添加了详细信息。请看我编辑的帖子。关键是,我想进一步为模式添加标准。我们能做到吗?
    • @adamrusn 如果您要匹配名称以a 开头并以123 结尾的所有变量,则可以使用^a.*[1-3]$
    • 啊,是的!我们可以使用点. 来分隔条件。因此,当我们想使用位于字符串末尾和中间的数字标准时,我们可以使用^a.[1-2].[1-2]$。谢谢你的帮助,维克托!
    猜你喜欢
    • 2022-01-04
    • 2019-05-11
    • 1970-01-01
    • 2019-04-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-23
    • 2017-01-06
    相关资源
    最近更新 更多