簡體   English   中英

將函數中的值傳遞給ddply

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM