2010-11-05 42 views
14

Câu hỏi nhanh ...Đối số chức năng truyền dưới dạng chuỗi ký tự?

Làm cách nào để lấy đối số của một số chức năng cụ thể (do người dùng xác định) và đặt đối số đó làm chuỗi ký tự?

Nếu vì một ví dụ đơn giản,

foo <- function(x) { ... } 

Tôi muốn chỉ đơn giản là trả lại tên đối tượng x của. Vì vậy,

foo(testing123) 

lợi nhuận "testing123" (và testing123 chỉ có thể có một số vector số ngẫu nhiên)

Xin lỗi nếu câu hỏi này đã được hỏi trước - đã tìm kiếm, nhưng không thể tìm thấy nó! Cảm ơn!!

Trả lời

31
foo <- function(x) deparse(substitute(x)) 
2

Rất tiếc, dường như tôi không tìm đủ cứng ...

foo <- function(x) {return(as.character(substitute(x)))} 

Vâng đó là dễ dàng ...

+0

'deparse (thay thế (x))' sẽ là cách thông thường để làm điều này, theo câu trả lời của JD. So sánh phiên bản của bạn với JD trên thanh 'foo (kiểm tra *) 'này để xem tại sao. –

+0

Yep !! Tôi mới nhận ra điều này. 'deparse' là con đường để đi. Cám ơn vì đã xác nhận. – Ray

+3

nếu bạn hài lòng với câu trả lời của JD, hãy chắc chắn chấp nhận nó vì vậy tôi) JD nhận được một số đại diện và ii) người dùng khác đang đọc Q biết điều này đã trả lời câu hỏi của bạn Q –

17

Meta-câu trả lời: nếu bạn biết R làm điều gì đó và bạn muốn để làm điều đó, hãy kiểm tra nguồn. Ví dụ: bạn có thể đã phát hiện ra rằng plot(foo) gậy 'foo' trong số ylab, do đó cốt truyện có thể làm điều đó. Làm sao? Bắt đầu bằng cách xem mã:

> plot 
function (x, y, ...) 
{ 
    if (is.function(x) && is.null(attr(x, "class"))) { 
     if (missing(y)) 
      y <- NULL 
     hasylab <- function(...) !all(is.na(pmatch(names(list(...)), 
      "ylab"))) 
     if (hasylab(...)) 
      plot.function(x, y, ...) 
     else plot.function(x, y, ylab = paste(deparse(substitute(x)), 
      "(x)"), ...) 
    } 
    else UseMethod("plot") 
} 

Và có một số ma thuật deparse(substitute(x)).

+0

Không chắc nó có thực sự quan trọng hay không. 'plot' không giống như thế này nữa –

+0

@Spacedman: đây là một điểm rất tốt! – theforestecologist

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