【问题标题】:How to write a function that calculates the correlation between variables如何编写一个计算变量之间相关性的函数
【发布时间】:2019-03-10 06:38:46
【问题描述】:

我需要编写一个包含三个参数的函数:dat - 数据框的名称,mainVar - 用于计算第三个变量之间相关性的字符向量,以及 varlist - 包含一个或多个值的字符向量。

该函数将返回一个包含相关系数和对应的数据框 每对之间的 p 值。

我希望实现的示例:

 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)
}

我的代码无法运行,所以我知道我做错了什么。我怎样才能达到我想要的输出?

【问题讨论】:

    标签: r


    【解决方案1】:

    如果我的目标正确,这里有一个 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
    

    【讨论】:

    • @CTD 不客气。如果答案有助于解决问题,您可以单击上下箭头下方的勾号。它为您和回答者赢得了一些代表。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-02-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-13
    • 2022-08-19
    • 1970-01-01
    相关资源
    最近更新 更多