【发布时间】:2018-06-18 16:18:19
【问题描述】:
背景是我有一些遗留代码在一些地方使用 plyr,直到几天前,plyr 还没有更新以使其与 R 3.5 一起使用。我认为这有点表明对 plyr 的支持正在减少,因此我正在考虑将 plyr 命令更改为 dplyr。旧代码中的 ddply 命令涉及一些“get”命令来引用名称包含在变量中的列。直接翻译将涉及以下类型的代码(一个人为的示例,但它说明了这一点)。它似乎可以工作,并使其最接近原始代码,但是这样做有什么陷阱吗?我的印象是这不是制造商认可的使用 dplyr 编程的方式!
示例代码:
library("dplyr")
testFunction <- function(dataset, groupcol, varcol){
summaryTable <- dataset %>%
group_by(get(groupcol)) %>%
summarise(mean_var = mean(get(varcol)),
sd_var = sd(get(varcol)))
return(summaryTable)
}
testGroup <- "cyl"
testVar <- "mpg"
testFunction(mtcars, testGroup, testVar)
作为恐龙,我很想从 plyr 翻译回 base-R(看不到“get”),例如类似:
fossilFunction <- function(dataset, groupcol, varcol){
z <- by(dataset, dataset[ , testGroup], function(x){
c(mean_var = mean(x[ , varcol]),
sd_var = sd(x[ , varcol]))
})
z <- do.call(rbind, z)
data.frame(rownames(z), z, row.names = NULL)
}
testGroup <- "cyl"
testVar <- "mpg"
fossilFunction(mtcars, testGroup, testVar)
在这种情况下,速度不是问题。但是,必须努力向前看,而不是向后看……
【问题讨论】: