找不到对象 - 嵌套函数 - R.

时间:2018-03-20 12:46:04

标签: r environment-variables nested-function

我仍在使用功能。我查看了环境文档,但我无法弄清楚如何解决错误。让我们看看我到现在为止所尝试的内容:

我有一份文件清单。让我们假设它是“核心”

library(dplyr)
table_1 <- data.frame(replicate(10,sample(0:1,1000,rep=TRUE)))
table_2 <- data.frame(replicate(10,sample(0:1,1000,rep=TRUE)))

core <- list(table_1, table_2) 

然后,我必须为列表的每个元素运行函数documents_。此函数提供了一些在另一个嵌套函数中执行的参数:

documents_ <- function(i) {

  core_processed <- as.data.frame(core[[i]])

  x <- 1:nrow(core_processed)
  y <- 1:ncol(core_processed)

  temp <- sapply(x, function(x) mapply(calc_dens_,x,y))

  return(temp)

}

在其中,有calc_dens函数,它是:

calc_dens_ <- function(x, y) {

  core_temp <- core_processed %>%
    filter(X2 == x & X3 == y)

   return(core_temp)
}

然后,对于列表中每个元素的迭代,我尝试了没有成功:

calc <- lapply(c(1:2), function(i) documents_(i))

Error in eval(lhs, parent, parent) : object 'core_processed' not found

calc_dens函数没有得到documents_的结果(环境问题。有没有办法解决这个问题,还是其他更好的方法?我的函数比这个更复杂,但是主要元素在这个例子中。谢谢你提前。

1 个答案:

答案 0 :(得分:0)

正如其他评论者所说,问题在于你指的是一个不在范围内的变量core_processed。你可以把它变成一个全局变量,但是在这样的闭包中使用它可能更明智:

table_1 <- data.frame(replicate(10,sample(0:1,1000,rep=TRUE)))
table_2 <- data.frame(replicate(10,sample(0:1,1000,rep=TRUE)))
cores <- list(table_1, table_2)

documents_ <- function(core_processed) {
    x <- 1:nrow(core_processed)
    y <- 1:ncol(core_processed)
    calc_dens <- function(x, y) core_processed %>% filter(X2 == x & X3 == y)
    sapply(x, function(x) mapply(calc_dens, x, y))
}

calc <- lapply(cores, documents_)

如果cores是数据框列表,则无需使用as.data.frame,因为您使用lapply,因此无需应用索引,然后索引到列表。所以我在这里编写的代码是简化的,但与代码的代码相同。

但是,我不得不怀疑,这真的是你想要的吗? sapply超过x,然后mapply超过xy - 其中x是来自sapply的{​​{1}}不是你在documents_中建立的那种 - 看起来对我来说很奇怪。