【问题标题】:Need to access variables from a parent apply within a child apply without globally scoping需要在没有全局范围的情况下在子应用中访问父应用的变量
【发布时间】:2011-03-25 19:48:29
【问题描述】:

让我再试一次,我将省略确切的数据/示例,只介绍我需要完成的工作。

我需要在 data.frame 的行上应用一个函数,这很简单。然后我需要使用传递给它的 data.frame 在该函数中派生一些变量。最后,我想在 data.frame 的子集上应用一个新函数,并在新函数中使用派生变量。

谁能告诉我最好的做法,而不是在全局范围内限定我的每个变量(var1、var2)?

cpt <- a.data.frame

query.db <- function(another.data.frame){
        var1 <- some.values
        var2 <- some.other.values
        apply(cpt[var1,], 1, calc.enrichment) #calc.enrichment needs to access var1, var2!
}

我尝试将 calc.enrichment 函数编写为用户定义的函数,而不是超出范围,但我的参数列表(var1、var2)没有被识别。感谢您的帮助。

【问题讨论】:

  • 你做的例子很难理解。 var1var2 来自哪里?它们是对another.data.frame 中某些变量的计算吗?试图从这个函数返回什么?你在做什么类型的计算?数值数据?分类数据?这个问题以目前的形式很难回答。
  • 将所有要使用的对象显式传递给下游函数是一种很好的记账方式。

标签: r dataframe


【解决方案1】:

这个愚蠢的例子对我有用,似乎解决了你的追求。我们使用var1 来索引apply 函数中使用的data.frame 的列,就像您所做的那样。 var2 只是传递给它的 data.frame 第一列的标准偏差。我猜你的真实例子会做一些更有用的事情。

cpt <- data.frame(a = rnorm(5), b = rnorm(5), c = rnorm(5))
another.data.frame <- data.frame(d = rnorm(5), e = rnorm(5), f = rnorm(5))

query.db <- function(dat, outer.dat) {
  var1 <- sample(1:nrow(dat), sample(1:nrow(dat), 1, FALSE), FALSE)
  var2 <- sd(dat[, 1])

  apply(outer.dat[var1 ,], 1, function(x) apples = x * sin(var2) / cos(var2) ^ 2)

}


query.db(another.data.frame, cpt)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-08-11
    • 1970-01-01
    • 2012-10-13
    • 1970-01-01
    • 1970-01-01
    • 2012-04-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多