gpt4 book ai didi

r - 将函数中的值传递给 ddply

转载 作者:行者123 更新时间:2023-12-02 05:42:56 24 4
gpt4 key购买 nike

我已经ddply 沿着这些线路构建了一个data.frame:

out <- ddply(data, .(names), varA = sum(value > 10))

这很好用,所以我试着把它放到一个函数中

func <- function(val.in) {
out <- ddply(data, .(names), varA = sum(value > val.in))
}

func(10)

这不起作用 - 看起来 ddply 找不到“val.in”

Error in eval(expr, envir, enclos) : object 'val.in' not found

有人知道为什么吗?

如果背景不够,请告诉我,我会更新。

最佳答案

我已尝试使用 ddply 下示例中的一些示例数据来重现您的问题。

首先,一些示例数据:

dfx <- data.frame(
group = c(rep('A', 8), rep('B', 15), rep('C', 6)),
sex = sample(c("M", "F"), size = 29, replace = TRUE),
age = runif(n = 29, min = 18, max = 54)
)

head(dfx)
# group sex age
# 1 A F 53.08787
# 2 A M 30.47225
# 3 A F 26.78341
# 4 A F 26.46841
# 5 A F 34.65360
# 6 A M 21.26691

以下是您可能会尝试的方法(我假设您打算在问题中使用 summarize)。

library(plyr)
ddply(dfx, .(group, sex), summarize, varA = sum(age > 25))
# group sex varA
# 1 A F 5
# 2 A M 1
# 3 B F 6
# 4 B M 4
# 5 C F 3
# 6 C M 2

然后我们可能会尝试在函数中使用它,如下所示:

func <- function(val.in) {
out <- ddply(dfx, .(group, sex), summarize, varA = sum(age > val.in))
out
}

func(25)
# Error in eval(expr, envir, enclos) : object 'val.in' not found

^^ 你的错误^^


最直接的解决方案是使用here(这有助于ddply找出在哪里寻找东西):

func <- function(val.in) {
out <- ddply(dfx, .(group, sex), here(summarize), varA = sum(age > val.in))
out
}

func(25)
# group sex varA
# 1 A F 5
# 2 A M 1
# 3 B F 6
# 4 B M 4
# 5 C F 3
# 6 C M 2

更新

据我所知,这似乎不是“dplyr”中的问题:

library(dplyr)
myFun <- function(val.in) {
dfx %>% group_by(group, sex) %>% summarise(varA = sum(age > val.in))
}
myFun(10)
# Source: local data frame [6 x 3]
# Groups: group
#
# group sex varA
# 1 A F 5
# 2 A M 3
# 3 B F 7
# 4 B M 8
# 5 C F 2
# 6 C M 4

关于r - 将函数中的值传递给 ddply,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16855963/

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