Как сделать множественный возврат в функции R и объединить возврат в таблицу? - PullRequest
0 голосов
/ 12 марта 2020
x <- function(beta){
  q <- numeric()
  e <- numeric()
  for (i in 1:10){
    q[i] <- i+2-beta
    e[i] <- i*3+beta
  }
  z <- mean(q)
  c <- sd(e)
  return(c)
  return(z)
}
x(3)
x(4)
x(7)

Я хочу получить возврат для c и z и объединить все x() в таблицу так, чтобы первый столбец был x(1), x(4), x(7) и второй столбец - значения для c, а третий столбец - значения для z. Как мне это сделать?

Ответы [ 2 ]

3 голосов
/ 12 марта 2020

Возврат list

x <- function(beta){
  q <- numeric(10)
  e <- numeric(10)
  for (i in 1:10){
    q[i] <- i+2-beta
    e[i] <- i*3+beta
   }
  list(mean = mean(q), sd = sd(e))
}

num <- c(1, 4, 7)
cbind.data.frame(x = num, t(sapply(num, x)))

#  x mean       sd
#1 1  6.5 9.082951
#2 4  3.5 9.082951
#3 7  0.5 9.082951
1 голос
/ 12 марта 2020

Поскольку ваши возвращаемые значения являются скалярами, вы можете использовать c для возврата x (в противном случае используйте list, как упомянуто @Ronak Shah), например,

x <- Vectorize(function(beta){
  q <- numeric()
  e <- numeric()
  for (i in 1:10){
    q[i] <- i+2-beta
    e[i] <- i*3+beta
  }
  c(beta = beta, mean = mean(q), sd = sd(e))
})

где Vectorize применяется, чтобы разрешить векторизованную операцию x.

Пример

b <- c(1, 4, 7)
res <-as.data.frame(t(x(b)))

> res
  beta mean       sd
1    1  6.5 9.082951
2    4  3.5 9.082951
3    7  0.5 9.082951
...