Применение функции к каждой строке в кадре данных и сохранение результата в новом столбце - PullRequest
0 голосов
/ 24 октября 2018

У меня есть следующий код для создания кадра данных в R. Затем я создаю ответную переменную y со значениями ноль.Я хотел бы, чтобы результат функции передавал значения из каждой строки в столбцах A, B, C и D, а затем возвращал полученный результат, сохраненный в столбце y, в соответствии с уравнением, хранящимся в d.

Может кто-нибудь помочьменя здесь?

# Create Design Matrix
A <- rep(c(-1, 1), 8)
B <- rep(rep(c(-1, 1), each=2), 4)
C <- rep(rep(c(-1, 1), each=4), 2)
D <- rep(c(-1, 1), each=8)
desMat <- cbind(A,B,C,D)
desMat
y <- 0 #Response Variable
data <- data.frame(desMat,y)

Outcome <- function(w,x,y,z){
  #Linear model
  set.seed(1456)
  e <- rnorm(1,0,3)
  d <- 8.3+(5.2*w)-(8.4*x)-(1.8*z)+(7.5*w*z)-(2.1*x*z)+e
  return(d)
}

1 Ответ

0 голосов
/ 24 октября 2018

Вы можете использовать пакеты в Tidyverse, чтобы сделать это:

##I converted your matrix to a tibble, but you can always convert back to a matrix by using as.matrix

##Load tidyverse packages
library(tidyverse)

# Create Design Matrix
A <- rep(c(-1, 1), 8)
B <- rep(rep(c(-1, 1), each=2), 4)
C <- rep(rep(c(-1, 1), each=4), 2)
D <- rep(c(-1, 1), each=8)
desMat <- cbind(A,B,C,D)
desMat
y <- 0 #Response Variable
data <- data.frame(desMat,y)


Outcome <- function(w,x,y,z){
  #Linear model
  set.seed(1456)
  e <- rnorm(1,0,3)
  d <- 8.3+(5.2*w)-(8.4*x)-(1.8*z)+(7.5*w*z)-(2.1*x*z)+e
  return(d)
}

##Then run the following code
desMat_new <- desMat %>% as_tibble() %>% mutate(row_result = Outcome(A, B, C, D))

##if you need the result to be a matrix
 desMat_new <- desMat %>% as_tibble() %>% mutate(row_result = Outcome(A, B, C, D)) %>% as.matrix()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...