Как использовать переменную в функции lm () в R? - PullRequest
2 голосов
/ 28 апреля 2020

Допустим, у меня есть фрейм данных (df) с двумя столбцами, называемыми «высота» и «вес».

Допустим, я определил:

x = "height"

Как использовать x в моей функции lm()? Ни df[x], ни просто использование х не работает.

Ответы [ 3 ]

3 голосов
/ 28 апреля 2020

Два способа:

Создать формулу с помощью paste

x = "height"
lm(paste0(x, '~', 'weight'), df)

Или использовать reformulate

lm(reformulate("weight", x), df)

Используя воспроизводимый пример с mtcars набор данных:

x = "Cyl"
lm(paste0(x, '~', 'mpg'), data = mtcars)

#Call:
#lm(formula = paste0(x, "~", "mpg"), data = mtcars)

#Coefficients:
#(Intercept)          mpg  
#    11.2607      -0.2525  

и то же самое с

lm(reformulate("mpg", x), mtcars)
1 голос
/ 28 апреля 2020

Когда вы запускаете x = "height", вы присваиваете строку символов переменной x.

Рассмотрим этот фрейм данных:


df <- data.frame(
  height = c(176, 188, 165),
  weight = c(75, 80, 66)
)

Если вы хотите регрессию с использованием height и weight, вы можете сделать это:

lm(height ~ weight, data = df)

# Call:
#   lm(formula = height ~ weight, data = df)
# 
# Coefficients:
#   (Intercept)       weight  
#        59.003        1.593 

или это :

lm(df$height ~ df$weight)

# Call:
#   lm(formula = df$height ~ df$weight)
# 
# Coefficients:
#   (Intercept)    df$weight  
#        59.003        1.593  

Если вы действительно хотите использовать x вместо height, у вас должна быть переменная с именем x (в вашем df или в вашей среде). Вы можете сделать это, создав новую переменную:

x <-  df$height
y <- df$weight

lm(x ~ y)  

# Call:
#   lm(formula = x ~ y)
# 
# Coefficients:
#   (Intercept)            y  
#        59.003        1.593  


или изменив имена существующих переменных:

names(df) <- c("x", "y")
lm(x ~ y, data = df)

# Call:
#   lm(formula = x ~ y, data = df)
# 
# Coefficients:
#   (Intercept)            y  
#        59.003        1.593
1 голос
/ 28 апреля 2020

Мы можем использовать glue для создания формулы

x <- "height"
lm(glue::glue('{x} ~ weight'), data = df)

Используя воспроизводимый пример с mtcars

x <- 'cyl'
lm(glue::glue('{x} ~ mpg'), data = mtcars)

#Call:
#lm(formula = glue::glue("{x} ~ mpg"), data = mtcars)

#Coefficients:
#(Intercept)          mpg  
#    11.2607      -0.2525  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...