需要从子应用程序访问变量应用于子应用程序而不进行全局范围设定

时间:2011-03-25 19:48:30

标签: r dataframe

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

我需要在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)未被识别。谢谢你的帮助。

1 个答案:

答案 0 :(得分: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)