R: как я могу ссылаться на соответствующий столбец между комбинацией имен в фрейме данных?

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

myPairs <- combn(names(iris[1:4]), 2)

f <- function(x,y)
{
#Want to make a lm(x ~ y) and other potential calculations 
}

a <- myPairs[1,]
b <- myPairs[2,]

mapply(f, a, b)

Другими словами, я хочу рассчитать это так:

data <- iris
attach(data)
lm(Sepal.Length ~ Sepal.Width)
lm(Sepal.Length ~ Petal.Length)
lm(Sepal.Length ~ Petal.Width)
lm(Sepal.Width ~ Petal.Length)
lm(Petal.Length ~ Petal.Width)

но используя имена из комбинации как ссылку на набор данных


person Luke Zhang    schedule 15.06.2016    source источник


Ответы (1)


Во-первых, не прикрепляйте свои данные. Вместо этого используйте аргумент data для lm.

Построим формулы:

myFormula = apply(myPairs, MARGIN = 2, FUN = paste, collapse = " ~ ")

Затем сделайте модели

myModels = lapply(myFormula, function(x) lm(formula = x, data = iris))

Затем мы можем проверить некоторые результаты:

myModels[[1]]
# Call:
# lm(formula = x, data = iris)
#
# Coefficients:
# (Intercept)  Sepal.Width  
#      6.5262      -0.2234  
person Gregor Thomas    schedule 15.06.2016
comment
combn также имеет аргумент FUN= - combn(names(iris[1:4]), 2, FUN=function(x) lm(paste(x,collapse=" ~ "), data=iris), simplify=FALSE), так что вы можете избежать необходимости использовать lapply позже. - person thelatemail; 15.06.2016
comment
Спасибо ребята. Функция lm() была только началом. В конце концов, я хотел бы сделать более сложные вычисления и использовать коэффициент из lm() для некоторых других вычислений. - person Luke Zhang; 15.06.2016