2012-07-12 26 views
10

Tôi có một chức năng đơn giản trong một trong các gói R của tôi, với một trong các đối số symbol="£":Cách sử dụng ký hiệu không phải ASCII (ví dụ: £) trong hàm gói R?

formatPound <- function(x, digits=2, nsmall=2, symbol="£"){ 
    paste(symbol, format(x, digits=digits, nsmall=nsmall)) 
} 

Nhưng khi chạy R CMD check, tôi nhận được cảnh báo này:

* checking R files for non-ASCII characters ... WARNING 
Found the following files with non-ASCII characters: 
    formatters.R 

Đó chắc chắn rằng biểu tượng £ gây ra vấn đề. Nếu tôi thay thế bằng ký tự ASCII hợp pháp, như $, cảnh báo sẽ biến mất.

Câu hỏi: Tôi có thể sử dụng £ trong đối số chức năng của mình như thế nào mà không phải cảnh báo R CMD check?

+0

Có lẽ bằng cách xác định tham số mã hóa, và thiết lập một trong hai latin1 hoặc utf-8? –

Trả lời

10

Có vẻ như "Viết R tiện ích mở rộng" bao gồm phần này trong Mục 1.7.1 "Encoding Issues".


Một trong các đề xuất trong trang này là sử dụng mã hóa Unicode \uxxxx. Kể từ £ là Unicode 00A3, bạn có thể sử dụng:

formatPound <- function(x, digits=2, nsmall=2, symbol="\u00A3"){ 
    paste(symbol, format(x, digits=digits, nsmall=nsmall)) 
} 


formatPound(123.45) 
[1] "£ 123.45" 
+0

Cảm ơn bạn. Điều này thực sự hữu ích. Tôi đã chỉnh sửa câu trả lời của bạn để cụ thể hơn trong lời khuyên của nó. (Như một bên, googling cho thông điệp cảnh báo này chỉ đơn giản là kết quả trong danh sách các gói với cảnh báo này!). – Andrie

+0

Cảm ơn vì điều đó, đã được/am một chút ép cho thời gian để không thể mở rộng ... –

+0

Vấn đề với cách tiếp cận này là ví dụ roxygen2 v6.0.1 tạo ra các tệp Rd mà sau này gây ra lỗi trong kiểm tra R CMD (ký tự không phải ASCII). Xem giải pháp thay thế của tôi bên dưới. –

3

Là một khắc phục, bạn có thể sử dụng chức năng intToUtf8():

# this causes errors (non-ASCII chars) 
f <- function(symbol = "➛") 

# this also causes errors in Rd files (non-ASCII chars) 
f <- function(symbol = "\u279B") 

# this is ok 
f <- function(symbol = intToUtf8(0x279B)) 
+0

Rất tốt, cảm ơn vì điều đó. –

+0

Tôi cũng phát hiện ra rằng gói 'testthat' gặp sự cố khi chạy các kiểm tra có chứa ký tự UTF-8. –

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