我仍在使用功能。我查看了环境文档,但我无法弄清楚如何解决错误。让我们看看我到现在为止所尝试的内容:
我有一份文件清单。让我们假设它是“核心”
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_
的结果(环境问题。有没有办法解决这个问题,还是其他更好的方法?我的函数比这个更复杂,但是主要元素在这个例子中。谢谢你提前。
答案 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
超过x
和y
- 其中x
是来自sapply
的{{1}}不是你在documents_
中建立的那种 - 看起来对我来说很奇怪。