2017-09-23 85 views
1

我很想念这里。我看了很多例子,但无法弄清楚以下问题。将data.frame的不同名称传递给函数

df1 <- data.frame(
    Rep = factor(rep(1:3, each = 4, times = 2)), 
    Gen = rep(paste0("T", 1:4), times = 6), 
    Env = rep(paste0("Loc", 1:2), each = 12), 
    Y = rnorm(24) 
) 

GEMeans <- 
    function(data, G, E, Y){ 
    G <- deparse(substitute(G)) 
    E <- deparse(substitute(E)) 
    Y <- deparse(substitute(Y)) 

    Means <- 
    reshape2::acast(
     data   = data 
     , formula  = data[[G]] ~ data[[E]] 
     , fun.aggregate = mean 
     , margins  = TRUE 
     , value.var  = data[[Y]] 
    ) 
    return(Means) 
    } 


GEMeans(df1, Gen, Env, Y) 

Error in `[.data.frame`(df, vars) : undefined columns selected 

回答

4

对您致电acast的电话稍作修改即可解决问题。

GEMeans <- 
    function(data, G, E, Y){ 
    G <- deparse(substitute(G)) 
    E <- deparse(substitute(E)) 
    Y <- deparse(substitute(Y)) 
    Means <- 
    reshape2::acast(
     data   = data 
     , formula  = as.formula(paste(G, E, sep = "~")) # here 
     , fun.aggregate = mean 
     , margins  = TRUE 
     , value.var  = Y # and here 
    ) 
    return(Means) 
    } 

试试看,它的工作原理。

+0

非常感谢@Rui。 – MYaseen208

相关问题