Как написать функцию, которая вычисляет соотношение между переменными - PullRequest
2 голосов
/ 10 марта 2019

Мне нужно написать функцию, которая содержит три аргумента: dat - имя фрейма данных, mainVar - вектор символов, используемый для вычисления корреляции между 3-ей переменной, и varlist - вектор символов, который содержит одно или несколько значений.

Функция вернет фрейм данных, который содержит коэффициент корреляции и соответствующий р-значение между каждой парой.

Пример того, чего я хочу достичь:

 myCortest (chol, "wt", "age")
     var1  var2          R            p
 age   wt   age  0.6660014 5.631448e-26

Что у меня так далеко:

myCortest <- function(dat, mainVar, varlist){
result <- data.frame()
for (i in 1:length(mainVar)){
foo <- cor.test(dat$mainvar, dat$varlist)
r <- data.frame(Varname = mainVar[i],
R <- as.vector(foo$estimate[1]),
P <- foo$p.value)
result <- rbind(result, r)
}
return(result)
}

Мой код не запускается, поэтому я знаю, что делаю что-то не так. Как мне достичь желаемого результата?

1 Ответ

1 голос
/ 10 марта 2019

Если я правильно понял цель, вот функция sa (i) mple:

myCortest <- function(dat, mainVar, varlist){

foo<-lapply(varlist,function(x){foo1<-cor.test(get(mainVar,as.environment(dat)), 
                       get(x,as.environment(dat)))
            data.frame(Var1=mainVar,Var2=x,
                       p.value=foo1$p.value,R.Sq=foo1$estimate)
            })

foo
}

Проверьте это:

myCortest (iris, "Sepal.Length", c("Petal.Length","Sepal.Width"))

Выход:

[[1]]
            Var1         Var2      p.value      R.Sq
cor Sepal.Length Petal.Length 1.038667e-47 0.8717538

[[2]]
            Var1        Var2   p.value       R.Sq
cor Sepal.Length Sepal.Width 0.1518983 -0.1175698
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...