Trong nhiệm vụ liên tục của tôi để tránh sử dụng dấu ngoặc đơn cho một số lệnh đơn giản, tôi đã viết lên toán tử sau đây để tạo một cửa sổ đồ họa mới. Câu hỏi của tôi là: tôi có nguy cơ "phá vỡ" bất cứ điều gì trong R, khác hơn là không có khả năng rõ ràng để thực hiện chức năng "không" trên biến "newdev" của tôi?R quá tải nhà điều hành đơn nhất: rủi ro?
# function to overload "!" for one purpose only
#this is adapted from the sos package code for "???", credited to Duncan Murdoch.
# Example of how to create a specialized unary operator that doesn't require
# parentheses for its argument. So far as I can tell,
#the only way to do this is to overload an existing function or
# operator which doesn't require parentheses. "?" and "!" meet this requirement.
`!` <- function (e1, e2) {
call <- match.call()
# match.call breaks out each callable function in argument list (which was "??foo" for the sos package "???",
# which allows topicExpr1 to become a list variable w/ callable function "!" (or "?" in sos)
original <- function() {
call[[1]]<-quote(base::`!`)
return(eval(call, parent.frame(2)))
}
# this does preclude my ever having an actual
# variable called "newdev" (or at least trying to create the actual NOT of it)
if(call[[2]] =='newdev') {
windows(4.5,4.5,restoreConsole=T)
}else{
return(original()) # do what "!" is supposed to do
}
}
Bạn chỉ cần sử dụng các lệnh đơn giản này trực tiếp tại dấu nhắc lệnh (tức là không nhúng chúng vào các hàm hoặc không có gì)? Nếu có, bạn có thể tạo một lớp mới và xác định phương thức in cho lớp đó sẽ làm những gì bạn muốn. – BenBarnes
Tôi nghĩ rằng có một cơ hội tốt để tôi gọi những lệnh này bên trong một hàm, nếu tôi muốn tạo một bộ sưu tập các biểu đồ, ví dụ: –