我有许多结构相同的文本文件,其中包含实验数据(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")