【问题标题】:Can I use a for loop to run a sample set through a user defined function?我可以使用 for 循环通过用户定义的函数运行样本集吗?
【发布时间】:2019-10-28 18:04:21
【问题描述】:

我想通过函数B 运行 n 大小的随机选择的样本(来自更大的数据集)次数。

这就是我目前所拥有的......

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)
    }
  }

我知道这是不完整的,但是对于使 for 循环正确运行 rand.sample 到 other.function、B 次数的帮助将不胜感激。

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

谢谢!!

编辑:函数estimates 返回a 和s 值的所需输出。 estimates(new.est) 完全按照我的意愿工作(输出 a 和 s 值,用于 n 大小的新数据集)。我想做的是在est.loop 内重复此B 次以创建a 和s 值的数组。

【问题讨论】:

  • 您是否要打印other.function(rand.sample) 的输出?还是保存在某个地方?如果是前者,请尝试更改为print(other.function(rand.sample))。除此之外,如果您添加一些元素以使其可重现(示例数据集、示例函数等),它可能会帮助我们回答您。
  • 在这里很难说你的目标是什么。您是否尝试在 for 循环的每次迭代中重新采样数据集?或者你只是得到一次重新采样的数据集?无论哪种方式,for 循环都不太可能设置正确,而且我认为您的重新采样不正确。
  • 最后,我想将other.function(rand.sample) 的输出打印为一个数组。在没有任何重复的情况下,other.function 会产生两个值(我想要的),但我现在想重复此操作以获取二值向量的 B 编号。我将添加元素/特异性来澄清。感谢您的及时回复。
  • 也许是res &lt;- lapply(seq_len(B), function(i) other.function(rand.sample))。然后函数返回res。

标签: r function for-loop


【解决方案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)

【讨论】:

    猜你喜欢
    • 2013-06-18
    • 1970-01-01
    • 1970-01-01
    • 2021-05-10
    • 2010-11-11
    • 2017-09-05
    • 2016-06-19
    • 2020-03-14
    • 2021-12-28
    相关资源
    最近更新 更多