SummaryBy的功能

时间:2016-07-29 17:16:51

标签: r function summary

我尝试编写一个函数来生成mean和sd

library(doBy)
fun = function(x){
  mean = mean(x, na.rm = TRUE)
  sd = sd(x, na.rm = TRUE)
  c(mean, sd)
  }

summaryBy(mpg~am, data = mtcars, FUN=fun)

它可以调用summaryBy,但是当我尝试输入函数来调用变量和数据集的名称时,它会给我错误

“列表中的错误(mpg,am,mtcars):(​​ list)对象无法强制键入'double”

list <- function(x,y,dataset){
  x <- as.numeric(x)
  y <- as.factor(y)
  table <- summaryBy(x~y, data = dataset, FUN=fun)
  table

}

list(mpg, am, mtcars)

感谢您的建议

2 个答案:

答案 0 :(得分:2)

这与summaryBy无关,这是list函数代码中的错误。 (顺便说一句,你不应该命名一个函数"list",因为这已经是R中一个重要函数的名称,你最终会遇到问题。)试试这个(你需要输入变量名)引号):

my.tab <- function(x, y, dataset){
  xn <- with(dataset, as.numeric(get(x)))
  yf <- with(dataset, as.factor(get(y)))
  newdf <- data.frame(xn=xn, yf=yf)
  names(newdf) <- c(x, y)
  table <- summaryBy(as.formula(paste0(x,"~",y)), data=newdf, FUN=fun)
  table
}
my.tab("mpg", "am", mtcars)
#   am mpg.FUN1 mpg.FUN2
# 1  0 17.14737 3.833966
# 2  1 24.39231 6.166504

答案 1 :(得分:1)

问题在于,当您调用函数list时,mpgam不是全局环境中的变量。要执行您想要的操作,请更改函数签名以输入公式并使用以下公式调用函数:

list <- function(f, dataset){
  return(summaryBy(f, data = dataset, FUN=fun))
}
table <- list(as.formula(mpg~am), mtcars)
print(table)
##  am mpg.FUN1 mpg.FUN2
##1  0 17.14737 3.833966
##2  1 24.39231 6.166504

希望这有帮助。