Могу ли я использовать цикл for для запуска выборочного набора через пользовательскую функцию? - PullRequest
1 голос
/ 28 октября 2019

Я хотел бы запустить случайно выбранную выборку (из большего набора данных) размера 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)
    }
  }

Я знаю, что это неполно, но некоторая помощь в получении правильного цикла for для выполнения rand.sample черезother.function, B количество раз будет очень цениться.

Примечание: когда я запускаю other.function(rand.sample) вне цикла, он работает как задумано. Мне просто нужно заставить его повторяться сейчас, используя вход для B при вызове my.function.

Спасибо !!

РЕДАКТИРОВАТЬ: Функция estimates возвращает желаемый вывод a и s значения. estimates(new.est) работает точно так, как я хотел бы (выведите значения a и s для нового набора данных размером n). То, что я хотел бы сделать, это повторить это B раз в est.loop, чтобы создать массив значений a и s.

1 Ответ

1 голос
/ 28 октября 2019

Может быть что-то вроде следующего делает то, о чем спрашивает вопрос.
Протестировано со встроенным набором данных 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)
...