Tôi có chức năng tôi đang chuyển ...
đến plot
, để người dùng có thể thêm đối số bổ sung. Đối với một số đối số tùy chọn này, tôi muốn thiết lập các giá trị mặc định, mà không khai báo chúng như là các đối số chính thức trong hàm. Dưới đây là một ví dụ đơn giảnĐặt đối số mặc định thành `...`
simpleFun <- function(a, b,...) {
args <- as.list(match.call())
if(is.null(args$xlim)) args$xlim <- quote(c(-6, 6))
plot(a, b, xlim = eval(args$xlim))
}
Sau đó, tôi có thể chạy simpleFun(rnorm(10), rnorm(10), xlim = c(-1, 1))
hoặc simpleFun(rnorm(10), rnorm(10))
và xlim
sẽ c(-1, 1)
trong ví dụ đầu tiên (được định nghĩa bởi người sử dụng) và c(-6, 6)
trong lần thứ hai (không được định nghĩa bởi người sử dụng). Vấn đề, tất nhiên, là ...
hiện không đi đâu cả. Tôi muốn xác định nó giống như
simpleFun2 <- function(a, b,...) {
args <- as.list(match.call())
if(is.null(args$xlim)) args$xlim <- quote(c(-6, 6))
plot(a, b, xlim = eval(args$xlim), ...)
}
để cho bất kỳ đối số bổ sung có thể được truyền cho plot
, nhưng sau đó gọi simpleFun(rnorm(10), rnorm(10), xlim = c(-1, 1))
sẽ không làm việc vì sẽ có hai xlim
đối số cung cấp cho plot
.
Vì vậy, về cơ bản, tôi tự hỏi liệu có cách nào để đặt giá trị mặc định cho bất kỳ đối số nào được chuyển qua ...
không? Tôi nhận ra cách tôi đã xác định những điều trên có lẽ ít hơn lý tưởng, nhưng nó là tốt nhất tôi đã đưa ra tại thời điểm này (mà vẫn không hoạt động).
@RichardScriven Và lý tưởng chỉ định 'envir = parent.frame()' để đảm bảo rằng nó được đánh giá khi người dùng gọi hàm. –
@RichardScriven Tôi thích ý nghĩ đó, nhưng dường như nó không có tác dụng với tôi. Nếu tôi thay thế 'lô (a, b, xlim = eval (args $ xlim), ...)' với 'do.call (" cốt truyện ", c (args, ...))' Tôi nhận được 'Lỗi trong lô (x, a = x, xlim = c (-6, 6)): đối tượng 'x' không tìm thấy' (cùng với cảnh báo bổ sung). Lưu ý rằng tôi nhận được cùng một lỗi khi bao gồm 'envir = parent.frame()'. –
Hmm ... Khi tôi chạy 'simpleFun2 (rnorm (10), rnorm (10))' (sử dụng mã của bạn) các giới hạn của trục x kết thúc lên 'c (-1, 1.5)', thay vì ' c (-6, 6) 'nó phải mặc định. –