【发布时间】:2018-08-29 06:58:54
【问题描述】:
我仍然习惯于使用函数。我查看了环境文档,但我无法弄清楚如何解决该错误。让我们看看我到现在为止的尝试:
我有一份文件清单。让我们假设它是“核心”
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_ 的结果(环境问题。有没有办法解决这个问题,或者其他更好的方法?我的函数比这更复杂,但主要元素在这个例子。提前谢谢你。
【问题讨论】:
-
我认为您应该包含您使用的软件包。 (
dplyr?)。另外,如果我将calc_dens_放在documents_中,它在我的机器上运行良好。 -
您应该明确地将
core_processed传递给calc_dens。该函数似乎无法通过可用的环境访问该变量。 -
core_processed不是全局变量,它的作用域仅限于documents_函数内。请参阅上面的评论以获取解决方案。 -
你说的都对。将完整的函数 calc_dens_ 放入documents_ 效果很好。
标签: r environment-variables nested-function