我可以使用for循环通过用户定义的函数运行样本集吗?

时间:2019-10-28 18:04:21

标签: r function for-loop

我想通过函数SELECT DISTINCT ip FROM visits WHERE time <= NOW() - INTERVAL 1 WEEK AND time >= NOW() - INTERVAL 2 WEEK; 来运行n个大小的随机选择的样本(从较大的数据集中)。

这是我到目前为止所拥有的...

B
estimates <- function(vctr){
  e.mean <- mean(vctr); e.var <- var(vctr) 
  return(c(a = e.mean^2/e.var, s = e.var/e.mean))
}

est.loop <- function(df, n, B){
    rand.sample <- sample(df, n)
    return(rand.sample)
}
new.est <- est.loop(df, n=100)
estimates(new.est)

我知道这是不完整的,但是对于使 for(rand.sample in B){ estimates(rand.sample) } } 循环正确运行forrand.sampleother.function次的一些帮助将非常感激。

注意:当我在循环外运行B时,它会按预期运行。我只需要让它现在调用other.function(rand.sample)时使用B的输入来重复一次即可。

谢谢!

编辑:函数my.function返回所需的estimatesa值输出。 s的工作方式与我想要的完全一样(为estimates(new.est)大小的新数据集输出as值)。我想做的是在n内重复B次,以创建一个est.loopa值的数组。

1 个答案:

答案 0 :(得分:1)

也许以下内容可以解决问题。
经过内置数据集iris的测试。

estimates <- function(df){
  f <- function(vctr){
    e.mean <- mean(vctr)
    e.var <- var(vctr) 
    c(a = e.mean^2/e.var, s = e.var/e.mean)
  }
  sapply(df, f)
}

est.loop <- function(df, n, B){
  i <- sample(nrow(df), n)
  rand.sample <- df[i, ]
  lapply(seq_len(B), function(i) estimates(rand.sample))
}

df <- iris[-5]

est.loop(df, n = 100, B = 3)