gpt4 book ai didi

r - 在函数内使用 ddply

转载 作者:行者123 更新时间:2023-12-04 16:26:27 27 4
gpt4 key购买 nike

我正在尝试在其中使用 ddply 来创建一个函数。但是我无法上类。这是一个复制我得到的虚拟示例。这有什么关系this bug ?

library(ggplot2)
data(diamonds)

foo <- function(data, fac1, fac2, bar) {
res <- ddply(data, .(fac1, fac2), mean(bar))
res
}

foo(diamonds, "color", "cut", "price")

最佳答案

您的代码有很多问题,但主要问题是:您将列名作为字符串传递。

只需在函数中使用您的参数进行“查找和替换”即可:

res <- ddply(diamonds, .("color", "cut"), mean("price"))

如果您了解如何 ddply工作(我有点怀疑这一点,考虑到其余的代码),你会明白这不应该工作:忽略最后一部分(函数)中的错误,这应该是(注意缺少引号: .() 符号只不过是 plyr 提供引号的方式):
res <- ddply(diamonds, .(color, cut), mean(price))

幸运的是, ddply还支持将其第二个参数作为字符向量传递,即列的名称,因此(再次忽略最后一个参数的问题),这应该变成:
foo <- function(data, facs, bar) {
res <- ddply(data, facs, mean(bar))
res
}

foo(diamonds, c("color", "cut"), "price")

最后:您传递给 ddply 的函数应该是一个函数,它将 data.frame 作为它的第一个参数,它每次都会保存你通过 data.frame(菱形)传递的部分,以获取 color 的当前值。和 cut . mean("price")mean(price)都不是。如果你坚持使用 ddply ,这是您需要执行的操作:
foo <- function(data, facs, bar) {
res <- ddply(data, facs, function(dfr, colnm){mean(dfr[,colnm])}, bar)
res
}
foo(diamonds, c("color", "cut"), "price")

关于r - 在函数内使用 ddply,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6584030/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com