【问题标题】:Passing a function argument to ddply将函数参数传递给 ddply
【发布时间】:2015-05-26 15:52:47
【问题描述】:

我知道那里有各种类似的问题,因此我为重复表示歉意。也就是说,虽然我找到了有关此主题的有用信息,但我尝试的任何方法似乎都不起作用。

简而言之,我在函数内部使用 ddply,并尝试将参数从函数传递给 ddply 中的函数。

使用iris 数据集的简化示例

IG_test <-function(data, feature){
  dd<-ddply(data, feature, here(summarise), N=length(feature))
  return(dd)
}

IG_test(iris, "Species")

这应该返回每个物种的记录数,但在每种情况下都返回 1。

如果我直接在 length() 中指定“物种”,我会得到我正在寻找的东西

IG_test <-function(data, feature){
  dd<-ddply(data, feature, here(summarise), N=length(Species))
  return(dd)
}

    IG_test(iris, "Species")

     Species  N
1     setosa 50
2 versicolor 50
3  virginica 50

描述类似问题的最新问题建议在 ddply 中将 here() 用于 summarize() 函数,以便告诉 ddply 在哪里查找变量。这是因为找到了feature(没有here(),我们会得到一个错误),但是它没有按预期返回长度。

有什么想法吗?

【问题讨论】:

    标签: r function plyr


    【解决方案1】:

    您将字符串名称“Species”传递给 ddply 函数。所以你应该在里面得到它的价值。然后ddply识别列名

    library(plyr)
    IG_test <-function(data, feature){
      dd<-ddply(data, feature, here(summarise), N=length(get(feature)))
      return(dd)
    }
    
    IG_test(iris, "Species")
    

    【讨论】:

    • 太棒了!这正是我想要的,谢谢。也感谢您的解释。
    猜你喜欢
    • 2014-03-23
    • 1970-01-01
    • 2013-01-27
    • 2021-04-18
    • 1970-01-01
    相关资源
    最近更新 更多