用R来识别什么是数据帧,什么是列.的参数

  • 本文关键字:参数 数据帧 识别
  • 更新时间 :
  • 英文 :


是否有可能只使用...参数的函数,但使R识别什么是data.frame,什么是列,无论将它们传递给函数的顺序如何?例如,不是使用:mean(data$column),而是使用mean(...),其中...将是(data, column)(column, data)

我想也许eval可以工作,但仍然停。任何建议都将非常感谢。

f <- function(...)
{
  args <- list(...)
  x <-eval(substitute(...), ..., parent.frame())
mean(x)
}
f(women, height)
f(height, women)

只是为了好玩:

f <- function(...)
{
  a <- as.list(match.call())
  stopifnot(length(a) == 3L)
  x <- a[[2]]
  y <- a[[3]]
  x <- as.character(x)
  y <- as.character(y)
  tryCatch(get(x, get(y)), 
           error = function(e) tryCatch(get(y, get(x)), 
                                        error = function(e) {
                                          message("no deal")
                                          NULL
                                        }
                                        )
           )
}
f(height, women)
#[1] 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72
f(women, height)
#[1] 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72
f(women, age)
#no deal
#NULL
f(men, height)
#no deal
#NULL

显然,有龙隐藏,你不应该在产品代码中使用这个

Fun:)

set.seed( 1 )
women <- data.frame( height = rnorm( 100, 1.70, 0.1 ) )
f <- function(...){
     args <-as.list( match.call( ) )
     cmnd_a <- paste0("a <- try(class(",args[[ 2 ]],"), silent = TRUE)" )
     a <- eval( parse( text = cmnd_a ) )
     if( a == "data.frame" ){
           cmnd <- paste0("mean(",args[[2]],"$",args[[3]],")")
     }else{
           cmnd <- paste0("mean(",args[[3]],"$",args[[2]],")")}
     eval( parse( text = cmnd ) )
}
> 
> f(height, women)
[1] 1.710889
> 
> f(women, height)
[1] 1.710889

最新更新