3

这是我在函数中调用 ffwhich 的代码:

library(ffbase)
rm(a,b)
test <- function(x) {
  a <- 1
  b <- 3
  ffwhich(x, x > a & x < b)
}
x <- ff(1:10)
test(x)
Error in eval(expr, envir, enclos) (from <text>#1) : object 'a' not found

traceback()
6: eval(expr, envir, enclos)
5: eval(e)
4: which(eval(e))
3: ffwhich.ff_vector(x, x > a & x < b)
2: ffwhich(x, x > a & x < b) at #4
1: test(x)

它可能是由懒惰的评估引起的?eval() 在函数测试中找不到有界的 a 和 b。如何在函数中使用 ffwhich?

  • R 2.15.2
  • ffbase 0.6-3
  • ff 2.2-10
  • 操作系统 openuse 12.2 64 位
4

2 回答 2

4

是的,它看起来像 Arun 所指示的 eval 问题。我通常在使用 ffwhich 时使用以下内容,这就像一个 eval。

library(ffbase)
rm(a,b)
test <- function(x) {
  a <- 1
  b <- 3
  idx <- x > a & x < b
  idx <- ffwhich(idx, idx == TRUE)
  idx
}
x <- ff(1:10)
test(x)
于 2012-12-28T08:41:00.770 回答
0

我遇到了同样的问题,给出的答案并没有解决它,因为我们不能将参数“条件”传递给函数。我只是有办法做到这一点。这里是 ::

require(ffdf) 
# the data :: 
x <- as.ffdf( data.frame(a = c(1:4,1),b=5:1))
x[,]

# Now the function below is working :: 

idx_ffdf <- function(data, condition){
 exp <-substitute( (condition) %in% TRUE) 
 # substitute will take the value of condition (non-evaluated). 
 # %in% TRUE makes the condition be false when there is NAs... 
 idx <- do.call(ffwhich, list(data, exp) ) # here is the trick: do.call !!! 
 return(idx)
}
# testing : 
idx <- idx_ffdf(x,a==1)
idx[] # gives the correct 1,5 ...

idx <- idx_ffdf(x,b>3)
idx[] # gives the correct 1,2 ... 

希望这对某人有帮助!

于 2013-05-23T09:32:19.650 回答