我需要创建一个具有可选参数的函数,具体取决于是给定还是必须计算频率: 示例表:
如果给出了:
tbl <- data.frame(
campoALimp = c('uno', "uno1", "Maria", "Mariana", "María", "Mara"),
freqAbs = c(2, 5, 2, 6, 7, 6))
如果不是:
tbl1 <- data.frame(campoALimp = tbl[rep(1:nrow(tbl), tbl[ , 2]), 1])
我的功能(部分内容)是:
limpio <- function (tabla, campo, campo_conteo){
tabla <- tabla[nchar(as.character(tabla[, campo])) > 2, ]
if(missing(campo_conteo))
{ print("calcula freq")
#detach("package:plyr", unload=TRUE)
require(dplyr)
tabla1<-data.frame(tabla %>%
group_by_(campo) %>% summarise(frecuencia = n() ))
} else {tabla1 <- tabla
tabla1$frecuencia <- tabla1[, campo_conteo]}
return(tabla1)
}
首先,我遇到了分离问题(在这种情况下会被注释,但如果我使用它会显示错误:
分离错误(“package:plyr”,unload = TRUE):无效“名称” 参数
如果我运行频率表的代码,我没有问题(它只复制原始表)。
limpio(tbl1, 'campoALimp')
但如果我为第二张桌子运行它: 我收到以下错误:
limpio(tbl, 'campoALimp', 'freqAbs')
Error in UseMethod("group_by_") :
no applicable method for 'group_by_' applied to an object of class "factor"
我尝试在函数外部编写分离plyr并运行函数,我也遇到了同样的错误。
我尝试在功能之外做同样的事情:
tabla <- tbl1
campo <- 'campoALimp'
tabla1 <- NULL
tabla1 <- data.frame(tabla %>%
group_by_(campo) %>% summarise(frecuencia = n() ))
我得到了正确的结果
campoALimp frequency
Mara 6
Maria 2
María 7
Mariana 6
uno 2
uno1 5
为什么这不能在函数内部工作? 感谢。