2014-08-28 3 views
0

I 이름은 다음과 R에 데이터 프레임을 만들었 :'|'제거 객체 이름에서?

table_file1_C.txt|file2_C.txt 

이 이름에서 실행되는 프로그램에 의해 생성 된 단일 .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이 '|' 개체 이름의 일부가 아닌 명령으로 읽습니다. 개체 이름의 일부로 이미 받아 들여졌지만.

그래서, | 객체의 이름에서. ,

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

당신이 볼 수 있듯이 :

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]]) 

그러나,이 출력이 같은 것을 제공 :이 같은 것을 사용하여 할당() 함수에 포함 GSUB()로이 작업을 수행 할 계획 이름이 엉망이되었고, | 실제로 제거되지 않았습니다.

| 제거 할 방법을 찾아야합니다. 이름에서, 그래서 내가 만든 개체를 처리 할 수 ​​있습니다. 또는 처음에는 이름에 포함되지 않도록합니다. 데이터를 생성하는 데 사용한 프로그램의 출력을 수정할 수 없기 때문에 R 내에서만이 작업을 수행 할 수 있습니다.

의미가 있습니까? 더 많은 정보가 필요한지 알려주십시오. 이것을 읽어 주셔서 감사합니다.

+0

로 이동합니다. 종종 글로벌 환경에서 별도의 객체를 만들 필요가 없습니다. 그들이 관련되어 있으면 목록에 보관하십시오. 'tmpTables'리스트에 그걸 보관 해 두지 않으시겠습니까? 그러나 도움이 더 필요하면 샘플을 재현 할 수 있어야합니다. 동일한 코드를 실행하여 동일한 결과를 얻을 수 없습니다.그러나 만약 당신이'assign ("a | b", 4)'를한다면, 당신은'\'a \ b \''로 값을 얻을 수 있습니다. – MrFlick

+0

고마워요, 새로운 객체를 만들 필요가없는 구현을하고 있습니다. – user3658874

답변

0

일반 표현식에서 | 문자를 이스케이프 처리해야합니다. 그렇지 않으면 모든 것을 일치시키는 빈 패턴입니다.

괄호로 문자를 이스케이프 (문자 클래스) :

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

백 슬래시로 이스케이프가 :

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

당신이 | 문자를 탈출하지 않으면, 그것은 "또는"작업입니다 정규 표현식에서. 아무것도 아니거나, 아무것도 일치하지 않는 것과 같습니다. 따라서 각 문자 사이의 .를 삽입 :

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

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

그래, 캐릭터를 피하려고 생각했는데 작동하지 않고 오브젝트 이름 만 반환했다. 나는 그것을 사용하여''| 캐릭터. – user3658874

0

을 어떤 이유로, 매튜 런드 버그는 나를 위해 제대로 작동하지 않던 문제 해결에 따라 ''로 탈출하지만, 함께 탈출 '했다.

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

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

덕분에 이것은 당신이`) (지정`수`사용하여()`또는되어서는 안 좋은 이유는 마태 복음

관련 문제