Я ищу символ подстановки для своей функции в R, но не знаю, что искать? - PullRequest
0 голосов
/ 22 мая 2018

Воспроизводимый пример

Я пытаюсь создать функцию для построения регрессий на основе подмножества данных.Мой воспроизводимый пример приведен ниже:

set.seed(1) # Reproducibility

testdat <- data.frame(x = runif(100),
                      y = rnorm(100),
                      factor = sample(c("A","B"),100,replace=T)) # Create a dummy data set

test.model <- function(input.factor = NULL){
  model.out = lm(y~x,data = testdat[which(testdat$factor == input.factor),])
} # Create a function that regresses x against y, after subsetting

modelA <- test.model(input.factor = "A") # Works fine
modelB <- test.model(input.factor = "B") # Also works fine
modelAll <- test.model(input.factor = "???") # I'm seeking the keyword for all the data here

Проблема

Моя функция отлично работает для случаев, когда input.factor = "A" или "B", но я хочу использовать функцию для всего набора данных.Я пытался использовать подстановочный знак *, но, похоже, это работает только для регулярных выражений.

Мой вопрос: какую строку мне нужно ввести в input.factor =, чтобы выбрать все значенияпеременная factor?

PS Как статистик, я знаю, что я должен включить переменную factor в саму регрессию.Тем не менее, мой реальный вариант использования - более сложная модель с гораздо большим количеством данных, поэтому вычисление полной модели занимает слишком много времени.

Ответы [ 2 ]

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

Я бы просто сделал это:

test.model <- function(input.factor = NULL){
  if (is.null(input.factor)){
    model.out = lm(y~x,data = testdata)
  } else{
    model.out = lm(y~x,data = testdat[which(testdat$factor == input.factor),])
  }
 model.out
} #
0 голосов
/ 22 мая 2018

Как уже заметил @Ronak, вам нужно внести 2 изменения.

Вызов функции test.model и ваш "подстановочный знак".* это SQL-синтакс, но вы можете запросить все уникальные имена в наборе данных с помощью unique().

set.seed(1) # Reproducibility

testdat <- data.frame(x = runif(100),
                      y = rnorm(100),
                      factor = sample(c("A","B"),100,replace=T)) # Create a dummy data set

test.model <- function(input.factor = NULL){
  model.out = lm(y~x,data = testdat[which(testdat$factor %in% input.factor),])
} # Create a function that regresses x against y, after subsetting

modelA <- test.model(input.factor = "A") # Works fine
modelB <- test.model(input.factor = "B") # Also works fine
modelAll <- test.model(input.factor = unique(testdat$factor))
...