首页 > 解决方案 > 计算两个列表之间的皮尔逊相关性

问题描述

我有许多包含实验数据 (641*976) 的结构相同的文本文件。一开始,我定义了正确的“工作目录”并将所有文件排序在一个列表中。因此,我生成了两个不同的列表。一次 file.listx 包含我的示例数据,一次 file.listy 包含参考数据。之后我重新排列数据以进行相关性分析。这里的代码显示了我如何生成“x”列表。“y”列表的生成方式与参考数据完全相同。

file.listx <- list.files(pattern="*.txt", full.names=T)

datalist = lapply(file.listx, FUN=read.table, header = F, sep = "\t", skip = 2)
cmbn = expand.grid(1:641, 1:977)
flen = length(datalist)
x=lapply(1:(nrow(cmbn)),function(t,lst,cmbn){
  return(sapply(1:flen,function(i,t1,lst1,cmbn1){
    return(lst1[[i]][cmbn1$Var1[t1],cmbn1$Var2[t1]])},t,lst,cmbn))}
  ,datalist,cmbn)

现在我想计算两个列表之间的皮尔逊相关性。 http://www.datasciencemadesimple.com/pearson-function-in-excel/ 根据皮尔逊相关公式,我的“x”对应样本,我的“y”对应参考。

cor(x, y, method = "pearson")

然后弹出错误消息'x'必须是数字。我不知道如何解决这个问题。当我使用时,

x = as.numeric(x)

似乎列表结构丢失了。并且以下方法也不能解决问题。

x = as.matrix(x)

如何在不丢失结构的情况下将列表转换为数字类型?我想计算两个列表之间的皮尔逊相关性。

这是生成两个虚拟列表的代码。这样可以重现错误。

x = list(4:10, 10:16, 32:38, 100:106) # sample
y = list(10:16, 20:26, 40:46, 110:116) # reference
cor(x, y, method = "pearson")

标签: rlistcorrelationnumericpearson

解决方案


推荐阅读