2012-04-09 8 views
7

ký tự thoát gây ra rất nhiều rắc rối trong R, bằng chứng là câu hỏi trước:Xóa thoát khỏi chuỗi hoặc "làm cách nào tôi có thể thoát "

  1. Change the values in a column
  2. Can R paste() output "\"?
  3. Replacing escaped double quotes by double quotes in R
  4. How to gsub('%', '\%', ... in R?

Nhiều người trong số những câu hỏi trước đó có thể là được đơn giản hóa thành các trường hợp đặc biệt của "Làm thế nào tôi có thể lấy \ ra khỏi con đường của tôi?"

Có cách nào đơn giản để thực hiện việc này không?

Ví dụ, tôi có thể tìm thấy không có lý lẽ để gsub rằng sẽ loại bỏ tất cả thoát sau:

test <- c('\01', '\\001') 
+0

'\ 0' là chuỗi nul. R đã không cho phép những người trong chuỗi cho một vài phiên bản. Bạn đang sử dụng phiên bản R nào? –

+0

@Josh: 2.14. Không có cách nào để trích xuất "0" từ "\ 0"? –

+0

Chỉ cần rõ ràng: bạn muốn xóa tất cả các phiên bản của "\?" nơi "\" được lấy theo nghĩa đen và "?" có nghĩa là bất kỳ nhân vật duy nhất? Hay bạn chỉ muốn xóa tất cả các phiên bản của "\" trừ khi nó là "\\"? Tôi vẫn sẽ đi với việc xây dựng regex '[\\] {1,}'. Chỉnh sửa: heck, ngay cả các phân tích cú pháp để chỉnh sửa ở đây messes up thoát :-( –

Trả lời

8

Khó khăn ở đây là "\1", mặc dù nó được in với hai glyphs, thực sự là, theo quan điểm R của một nhân vật duy nhất. Và trên thực tế, đó là nhân vật rất giống như "\001""\01":

nchar("\1") 
# [1] 1 
nchar("\001") 
# [1] 1 
identical("\1", "\001") 
# [1] TRUE 

Vì vậy, bạn thể trong remove chung tất cả những dấu xồ nguợc với một cái gì đó như thế này:

(test <- c("\\hi\\", "\n", "\t", "\\1", "\1", "\01", "\001")) 
# [1] "\\hi\\" "\n"  "\t"  "\\1" "\001" "\001" "\001" 
eval(parse(text=gsub("\\", "", deparse(test), fixed=TRUE))) 
# [1] "hi" "n" "t" "1" "001" "001" "001" 

Nhưng, như bạn có thể nhìn thấy , "\1", "\01"\001" tất cả sẽ được hiển thị là 001, (từ R đến tất cả chúng chỉ là các tên khác nhau cho "\001").


EDIT: Để biết thêm về việc sử dụng "\" trong trình tự thoát, và trên sự đa dạng to lớn của nhân vật có thể được biểu diễn sử dụng chúng (bao gồm cả chuỗi nul không được phép đề cập bởi Joshua Ulrich trong một chú thích ở trên) , xem this section định nghĩa ngôn ngữ R.

1

Tôi chỉ đối mặt với cùng một vấn đề - nếu bạn muốn bất kỳ \ x trong đó x là ký tự thì tôi không chắc chắn như thế nào, tôi ước mình biết, nhưng để khắc phục nó cho một chuỗi thoát cụ thể. nói \ n sau đó bạn có thể làm

new = gsub("\n","",old,fixed=T) 

trong trường hợp của tôi, tôi chỉ có \ n