2013-07-04 24 views
9

Trong Python, bạn có thể chỉ định dạng chuỗi theo tên (điều này là tất nhiên một ví dụ ngớ ngẩn):chuỗi định dạng sprintf: tham chiếu theo tên?

parameters = {'label':'months', 'april':4,'may':5,'june':6} 
formatstring = '%(label)s: %(april)d %(may)d %(june)d' 
outputstring = formatstring % parameters 

(Ký hiệu formatstring % parameters là Python tương đương với do.call(sprintf,c(formatstring,as.list(parameters))) trong R.)

Chuỗi đầu ra sẽ là "months: 4, 5, 6". các tham số được lưu trữ dưới dạng cặp khóa-giá trị (có thể được gọi là từ điển, hashtable hoặc danh sách được đặt tên bằng nhiều ngôn ngữ khác nhau). Định dạng chuỗi %(text)s cho phép bạn tham khảo mục từ điển nào (text) nên được định dạng trong vùng đó.

Có điều gì tương đương với R hay bạn đã tìm được giải pháp tốt?

+0

Trong sự quan tâm riêng của bạn, bạn không nên cho rằng tất cả mọi người có thể giúp bạn với R hiểu Python. Giải thích mã Python làm gì. – Roland

+0

[câu hỏi] này (http://stackoverflow.com/questions/13023274/how-to-do-printf-in-r) cung cấp một số nền hữu ích về "printf" trong R. – TooTone

+0

Cảm ơn @Roland, tôi đã thêm giải thích . – hatmatrix

Trả lời

13

1. Hãy thử gsubfn trong gsubfn package:

library(gsubfn) 
parameters <- list(label = "months", april = 4, may = 5, june = 6) 

gsubfn("\\w+", parameters, "label: april, may, june") 

2. hoặc thử fn$ so với cùng gói:

with(parameters, fn$identity("$label: $april, $may, $june")) 

3. Đây là một chức năng ghi vào ngắn biến đổi chuỗi định dạng và danh sách tham số thành sprintf và sau đó chạy nó:

library(gsubfn) 
`%format%` <- function(fmt, list) { 
    pat <- "%\\(([^)]*)\\)" 
    fmt2 <- gsub(pat, "%", fmt) 
    list2 <- list[strapplyc(fmt, pat)[[1]]] 
    do.call("sprintf", c(fmt2, list2)) 
} 

Sử dụng nó như thế này:

> '%(label)s: %(april)d %(may)d %(june)d' %format% parameters 
[1] "months: 4 5 6" 
+0

Điều này thật đẹp, cảm ơn bạn. Tôi biết 'gsubfn' sẽ là chìa khóa cho giải pháp. Tôi đã là một fan hâm mộ của công việc của bạn kể từ những ngày R-trợ giúp. – hatmatrix

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