删除' |'从对象名称?

时间:2014-08-28 01:59:33

标签: r

我在R中使用以下名称创建了一个数据框:

table_file1_C.txt|file2_C.txt

此名称由assign()函数生成,引用由在命令行上运行的程序生成的单个.txt文件。以下是创建此对象的循环示例:

assign(x=paste("table_",
               dir(file.dir, pattern="\\.txt$")[i],
               sep=''),
       value=tmpTables[[i]])#tmpTables holds the data I'm manipulating, as read in from readHTMLtable

问题是我在创建后无法引用该对象;

>table_file1_C.txt|file2_C.txt
Error: object 'file2_C.txt' not found

我相信R正在看到' |'字符,并将其作为指令阅读,而不是对象名称的一部分,即使它已经接受它作为对象名称的一部分。

所以,我需要删除|来自对象的名字。我计划使用嵌入在assign()函数中的gsub()来实现这一点,使用类似这样的东西:

assign(x=paste("table_",#creating the name of the object
               gsub(x=dir(file.dir, pattern="\\.txt$")[i],
                        pattern="|",
                        replacement="."),#need to remove the | characters!!
               sep=''),
       value=tmpTables[[i]])

然而,这个输出给出了这样的结果:

[1] ".t.a.b.l.e._.f.i.l.e.1...t.x.t.|.f.i.l.e.2...t.x.t."

正如您所看到的,名称已被破坏,而且|实际上并没有被删除。

我需要找到一种方法来删除|从名称,所以我可以处理我创建的对象。或者,首先防止它被包含在名称中。我只能在R中执行此操作,因为我无法修改用于生成数据的程序的输出。

这有意义吗?如果需要更多信息,请与我们联系。感谢您抽出宝贵时间阅读本文。

2 个答案:

答案 0 :(得分:0)

您需要转义正则表达式中的|字符。否则它是一个空模式,匹配所有内容。

用括号(字符类)转义字符:

x <- 'a|b'
gsub('[|]', '.', x)
## [1] "a.b"

使用反斜杠逃脱:

gsub('\\|', '.', x)
## [1] "a.b"

如果你没有逃脱|字符,那就是&#34;或&#34;正则表达式中的操作。什么都没有,就像没有匹配一样。因此,它在每个字符之间插入.

gsub('', '.', x)
## [1] ".a.|.b."

gsub('|', '.', x)  # Same as above
## [1] ".a.|.b."

答案 1 :(得分:0)

出于某种原因,逃避&#39; &#39;根据Matthew Lundberg的说法,对我来说并没有正常工作,而是逃避了。

> 'file1.txt|file2.txt'
[1] "file1.txt|file2.txt"

>`denovo_AR_C.txt|FOXA1_C.txt`
*data*

谢谢Matthew