File: within-operators.R

package info (click to toggle)
r-cran-memisc 0.99.31.8.2%2Bdfsg-1
  • links: PTS, VCS
  • area: main
  • in suites: sid, trixie
  • size: 2,136 kB
  • sloc: ansic: 5,117; makefile: 2
file content (36 lines) | stat: -rw-r--r-- 945 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
Within <- function(data, expr, ...){
    if(inherits(data,"data.frame"))
        UseMethod("Within")
    else UseMethod("within")
}

Within.data.frame <- function (data, expr, ...) 
{
    parent <- parent.frame()
    e <- evalq(environment(), data, parent)
    eval(substitute(expr), e)
    l <- rev(as.list(e, all.names = TRUE))
    l <- l[!vapply(l, is.null, NA, USE.NAMES = FALSE)]
    nl <- names(l)
    del <- setdiff(names(data), nl)
    data[nl] <- l
    data[del] <- NULL
    data
}

"%$$%" <- function(data,expr){
    # parf <- parent.frame()
    # nm <- deparse(x)
    # res <- within(x,expr)
    # res
    res <- if(inherits(data,"data.frame"))
               eval.parent(substitute(Within(data,expr)))
           else
               eval.parent(substitute(within(data,expr))) 
    nm <- deparse(substitute(data))
    assign(nm,res,envir=parent.frame())
}

"%$%" <- function(data,expr){
    eval.parent(substitute(with(data,expr)))
}