関数を簡素化 (正規表現を削除) し、文字入力のサポートを追加するために更新されました
match.call
このように引用符を使用せずに関数を呼び出すことができるように、関数内で使用できます。
sys <- function(...) {
command <- match.call()[[2L]]
if (!is.character(command)) {
command <- gsub("- ", "-", deparse(command))
}
system(command)
}
現在、次のいずれかは同等ですsystem("ls -a")
sys("ls -a")
sys(ls -a)
上記のsys
関数は、括弧内のものである呼び出しの 2 番目のコンポーネントを抽出します。すなわちls -a
、または"ls -a"
これらの例では。次に、それをに渡しますsystem
(deparse
そうでない場合は最初に通過しますcharacter
)
[文字列のサポートを追加しました。そうしないと、スラッシュやドットなどでは機能しないためです。たとえば、sys(ls /home)
機能しませんが、sys("ls /home")
機能します。]
ただし、これにはまだ括弧を使用する必要があります:-(
括弧の使用を避けるために、演算子をマスクできます。この回答の最初のバージョンで!
は、良いアイデアではないマスク方法を示しました。?
このように実行できるコメントで使用することを提案しました。
`?` <- function(...) {
command <- match.call()[[2L]]
if (!is.character(command)) {
command <- gsub("- ", "-", deparse(command))
}
system(command)
}
さて、これはsystem("ls -a -l")
?ls -a -l
ただし、スラッシュを使用する必要がある場合は、このように引用符を使用する必要があります
?"ls /home"
または、特別な二項演算子を作成することもできます
"%sys%" <- function(...) {
system(sub("%sys%", "", deparse(match.call())))
}
こんな感じで使えます
ls %sys% -l
ls %sys% .
スラッシュを使用する必要がある場合は、右側を引用する必要があります
ls %sys% "/home"
欠点は、演算子の右側に引数が 1 つだけ必要なことです。