Расчет в цикле в R - PullRequest
0 голосов
/ 17 мая 2018

Рассмотрим следующие данные:

library(Benchmarking)

x <- c(2, 3, 8)
y <- c(1, 5, 10)
k <- 25
d <- data.frame(x,y,k)
x <- c(5, 2, 3, 4)
y <- c(3, 5, 9, 10)
k <- 30
d2 <- data.frame(x,y,k)

d3 <- replicate(3, rbind(d, d2[sample(seq_len(nrow(d2)), 3), , drop=FALSE]), simplify = FALSE)

Итак, теперь у меня есть список 3 data.frame.Для каждого из этих 3 data.frame я хочу выполнить следующие вычисления:

e1 <- with(subset(d3[[1]], k == 25), dea(d3[[1]]$x, d3[[1]]$y, XREF = x, YREF = y))
e2 <- with(subset(d3[[1]], k == 30), dea(d3[[1]]$x, d3[[1]]$y, XREF = x, YREF = y))
we1 <- weighted.mean(eff(e1), d3[[1]]$y)
we2 <- weighted.mean(eff(e2), d3[[1]]$y)
va <- we2/we1

Но вместо трехкратного использования этого кода, где я изменяю [[1]] на [[2]] и [[3]], могуВместо этого я использую цикл, где он выполняет вычисления для всех 3 data.frame и создаю новый data.frame, где он перечисляет va для трех вычислений?

1 Ответ

0 голосов
/ 17 мая 2018

Мы создаем функцию, затем перебираем list и применяем функцию

f1 <- function(dat) {
   d1 <- subset(dat, k == 25)
   e1 <- with(d1, dea(dat$x, dat$y, XREF = x, YREF = y))
   d2 <- subset(dat, k == 30)
   e2 <- with(d2, dea(dat$x, dat$y, XREF = x, YREF = y))
   we1 <- weighted.mean(eff(e1), dat$y)
   we2 <- weighted.mean(eff(e2), dat$y)
   we2/we1

}

sapply(d3, f1)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...