вектор имен переменных в R

Я хотел бы создать функцию, которая автоматически генерирует одно- и многомерный регрессионный анализ, но я не могу понять, как я могу указать ** переменные в векторах ... ** Это кажется очень простым, но бегло просматривая документацию, я пока не понял ...

Простой пример

a<-rnorm(100)
b<-rnorm(100)
k<-c("a","b")
d<-c(a,b)
summary(k[1])

Но k [1] = "a" и является вектором символов ... d просто добавляется к a, а не к переменной имена. По сути, я бы хотел, чтобы k [1] представлял вектор a.

Оцените любые ответы ...

// M

7
задан Misha 27 August 2010 в 15:19
поделиться

3 ответа

Вы можете использовать функцию "get", чтобы получить объект на основе строки символов его имени, но в долгосрочной перспективе лучше хранить переменные в списке и просто получайте к ним доступ таким образом, все становится намного проще, вы можете захватывать подмножества, вы можете использовать lapply или sapply для запуска одного и того же кода для каждого элемента. При сохранении или удалении вы можете просто работать со всем списком, а не пытаться запомнить каждый элемент. например:

mylist <- list(a=rnorm(100), b=rnorm(100) )
names(mylist)
summary(mylist[[1]])
# or
summary(mylist[['a']])
# or
summary(mylist$a)
# or 
d <- 'a'
summary(mylist[[d]])

# or
lapply( mylist, summary )

Если вы программно создаете модели для анализа с помощью lm (или других функций моделирования), то один из подходов состоит в том, чтобы просто подмножить ваши данные и использовать «.», например:

yvar <- 'Sepal.Width'
xvars <- c('Petal.Width','Sepal.Length')
fit <- lm( Sepal.Width ~ ., data=iris[, c(yvar,xvars)] )

Или вы можете построить формулу, используя "paste" или "sprintf", затем используйте "as.formula", чтобы преобразовать его в формулу, например:

yvar <- 'Sepal.Width'
xvars <- c('Petal.Width','Sepal.Length')
my.formula <- paste( yvar, '~', paste( xvars, collapse=' + ' ) )
my.formula <- as.formula(my.formula)
fit <- lm( my.formula, data=iris )

Обратите внимание также на проблему множественных сравнений, если вы смотрите на множество разных моделей, подходящих автоматически.

11
ответ дан 6 December 2019 в 12:45
поделиться

вы можете использовать список k=list(a,b). Это создает список с компонентами a и b, но не является списком имен переменных.

3
ответ дан 6 December 2019 в 12:45
поделиться

get() это то, что вы ищете:

summary(get(k[1]))

edit: get() - это не то, что вы ищете, это list(). get() тоже может быть полезен.

Если вам нужна автоматическая генерация регрессионного анализа, вам действительно может пригодиться использование eval(), хотя каждый R-программист предупредит вас об использовании eval(), если только вы не очень хорошо понимаете, что делаете. Пожалуйста, внимательно прочитайте файлы справки о eval() и parse(), прежде чем использовать их.

Пример:

d <- data.frame(
  var1 = rnorm(1000),
  var2 = rpois(1000,4),
  var3 = sample(letters[1:3],1000,replace=T)
)

vars <- names(d)

auto.lm <- function(d,dep,indep){
      expr <- paste(
          "out <- lm(",
          dep,
          "~",
          paste(indep,collapse="*"),
          ",data=d)"
      )
      eval(parse(text=expr))
      return(out)
}

auto.lm(d,vars[1],vars[2:3])
2
ответ дан 6 December 2019 в 12:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: