誰かが "。"のように振る舞うカスタム関数の例を投稿できることを願っています。プライヤーで。
私が持っているのはデータフレームです。次のようなクエリを継続的に実行しているところ
sqldf("select * from event.df where Date in (select Date from condition.df where C_1 = 1 and (C_2 = 1 OR C_3 = 3)")
私が欲しいのは、基本的に次のように機能する機能を持つことです。
.(C_1, C_2 + C_3)
具体的には、データを選択するために使用する属性を定義する式のベクトルです。 "+"をORとして、 "*"をANDなどとして扱うことができます。
「」の戻り型を見てみました。プライヤーからしかしそれを理解していなかった。
回答:
回答№1は6に似た機能 plyr:::.
は plyr:::.
:
plyr:::.
function (..., .env = parent.frame())
{
structure(as.list(match.call()[-1]), env = .env, class = "quoted")
}
<environment: namespace:plyr>
これはリストを返し、それに "quoted"クラスを割り当てます。それがするのは、の引数と一致することです。 .()
囲んでいる環境の列名に。別のコンテキストで試してください。
with(iris, .(Sepal.Length, Species))
List of 2
$ Sepal.Length: symbol Sepal.Length
$ Species : symbol Species
- attr(*, "env")=<environment: 0x2b33598>
- attr(*, "class")= chr "quoted"
次にこのオブジェクトを使って何をするかはあなたの目的によって異なります。このクラスを操作する方法はいくつかあります。
methods(class="quoted")
[1] as.quoted.quoted* c.quoted* names.quoted* print.quoted* [.quoted*
Non-visible functions are asterisked
だから、もしあなたが "のような機能を探しているなら .()
、おそらくあなたは単に使用することができます .()
回答№2の場合は0
parse <- function (formula, blank.char = ".")
{
formula <- paste(names(formula), collapse = "")
vars <- function(x) {
if (is.na(x))
return(NULL)
remove.blank(strsplit(gsub("\s+", "", x), "[*+]")[[1]])
}
remove.blank <- function(x) {
x <- x[x != blank.char]
if (length(x) == 0)
NULL
else x
}
parts <- strsplit(formula, "\|")[[1]]
list(m = lapply(strsplit(parts[1], "~")[[1]], vars), l = lapply(strsplit(parts[2], "~")[[1]], vars))
}
parse(.(a + b ~ c + d | e))
$m
$m[[1]]
[1] "a" "b"
$m[[2]]
[1] "c" "d"
$l
$l[[1]]
[1] "e"