我在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中执行此操作,因为我无法修改用于生成数据的程序的输出。
这有意义吗?如果需要更多信息,请与我们联系。感谢您抽出宝贵时间阅读本文。
答案 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