[英]Passing a value from a function into ddply
我已經在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
好像你想編寫一個匿名函數並傳入第二個參數:
func<-function(val.in){
ddply(data, .(names), function(value,val.in) data.frame(varA=sum(value>val.in)), val.in)
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.