2012-02-26 48 views
19

Tôi cố gắng để loại bỏ một ngoặc đơn từ một chuỗi trong R và chạy vào các lỗi sau:remove ngoặc từ chuỗi

string <- "log(M)" 
gsub("log", "", string) # Works just fine 
gsub("log(", "", string) #breaks 
# Error in gsub("log(", "", test) : 
# invalid regular expression 'log(', reason 'Missing ')'' 

Trả lời

43

thoát ngoặc với một đôi dấu chéo ngược:

gsub("log\\(", "", string) 

(Bắt buộc: http://xkcd.com/234/)

12

Câu trả lời của Ben cung cấp cho bạn cách áp dụng tốt nhất để thực hiện điều này.

Ngoài ra, trong trường hợp của bạn, bạn có thể sử dụng đối số fixed=TRUE, như thế này:

gsub("log(", "", string, fixed=TRUE) 
# [1] "M)" 

Thật thích hợp bất cứ khi nào pattern lập luận để gsub() là một chuỗi ký tự chứa chuỗi đen của ký tự mà bạn đang tìm kiếm. Sau đó, nó đẹp vì nó cho phép bạn nhập chính xác mẫu mà bạn đang tìm kiếm, mà không cần thoát vv.

+1

nên là 'fixed =" TRUE "' hoặc 'fixed = TRUE' ??? –

+1

@BenBolker - Rất tiếc. Nó phải là 'fixed = TRUE', nhưng' fixed = "TRUE" ',' fixed = "true" ', và' fixed = "True" 'đều hoạt động. Các combo khác như 'fixed =" TRue "' hoặc 'fixed =" TruE "' không. Liên quan (?) Gần đây tôi nhận ra rằng 'rnorm (" 9 ")' (ví dụ) hoạt động, khi tôi nói nó không nên. (FWIW, 'rnorm (" 9 "," 1 ")' * không * làm việc.) Tôi tự hỏi liệu những trường hợp này có liên quan gì đến cách mã C bên dưới xử lý các đối số được truyền vào nó hay không. Bạn nghĩ sao? –

+1

Thú vị. Câu trả lời nằm trong '? As.logical':' ‘as.logical 'cố gắng ép buộc đối số của nó là hợp lý theo loại . Đối với ‘yếu tố’, điều này sử dụng ‘mức’ (nhãn). Giống như ‘as.vector’, nó chặn các thuộc tính bao gồm cả tên. Ký tựchuỗi 'c ("T", "TRUE", "True", "true")' được coi là true, 'c ("F", "FALSE", "False", "false")' là sai và tất cả những người khác là 'NA'.' –

Các vấn đề liên quan