0

誰かが「。」のように機能するカスタム関数の例を投稿できることを願っています。plyrで。

私が持っているのはデータフレームです。次のようなクエリを継続的に実行している場合:

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などとして扱うことができます。

「。」のリターンタイプを見てみました。plyrからですが、それを理解していませんでした。

4

2 に答える 2

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

したがって、のような関数を探している場合は.()、おそらく単に使用することができます.()

于 2012-05-09T17:05:28.400 に答える
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"
于 2012-05-09T19:56:59.757 に答える