【问题标题】:Calculate differences between sequences in vector, for distance matrix in R计算向量中序列之间的差异,用于 R 中的距离矩阵
【发布时间】:2021-05-03 18:51:42
【问题描述】:

大家好,我正在尝试从随机创建的序列中创建距离矩阵。 #设置代码

    DNA <- c("A","G","T","C")
    randomDNA <- c()

#创建64个元素的向量

    for (i in 1:64){
      randomDNA[i] <- paste0(sample(DNA, 6, replace = T), sep = "", collapse = "")
      warnings()
    }
    sizeofDNA <- length(randomDNA)

#这部分我想在向量的组件之间迭代

    split_vector <- c()
    DNAdiff <- c()
    for (i in 1:length(randomDNA)){
      split_vector <- strsplit(randomDNA[i], "")[[1]]
      #print(split_vector)
      for (j in 1:length(randomDNA)){
      split_vector2 <- strsplit(randomDNA[j], "")[[1]]
      #print(split_vector2)
      DNAdiff[i,j] <- setdiff(split_vector,split_vector2)
      #or
      #DNAdiff[i] <- lenght(setdiff(strsplit(randomDNA[22], "")[[1]],strsplit(randomDNA[33], "")[[1]]))
      }
    }

它不起作用的是 A:setdiff 没有按我的预期工作 B: 没有创建数组

问题我如何将 setdiff 的结果(如果它可以工作)导出到一个数组,以便我将拥有像数组一样的距离矩阵? 任何建议都受到高度欢迎。 谢谢大家

编辑:所以有两种解决方案:

A. 使用 @ThomasIsCoding 在 cmets 中提到的“adist”函数;这将计算 Levenshtein 距离:

    DNA <- c("A","G","T","C")
    randomDNA <- c()
    
    for (i in 1:64){
      randomDNA[i] <- paste0(sample(DNA, 6, replace = T), sep = "", collapse = "")
    }
    
    dm <-as.matrix(adist(randomDNA))
    
    rownames(dm) <- randomDNA
    colnames(dm) <- randomDNA
    
    pdf("heatmap.pdf")
    heatmap(dm, Rowv = NA, Colv = NA)
    dev.off()
    write.csv(dm,"distance_matrix.csv", row.names   = T, col.names  = T )

B.另一种计算汉明距离的方法是:

DNA <- c("A","G","T","C")
randomDNA <- c()

for (i in 1:96){
  randomDNA[i] <- paste0(sample(DNA, 6, replace = T), sep = "", collapse = "")
}

Humm <- matrix(nrow=length(randomDNA), ncol=length(randomDNA))
for (i in 1:length(randomDNA)){
  split_vector <- strsplit(randomDNA[i], "")[[1]]
  for (j in 1:length(randomDNA)){
    split_vector2 <- strsplit(randomDNA[j], "")[[1]]
    #Hamming distance is calculated as:
    Humm[i,j] <- sum(split_vector != split_vector2)
  }
}

rownames(Humm) <- randomDNA
colnames(Humm) <- randomDNA
pdf("heatmap.pdf")
heatmap(Humm, Rowv = NA, Colv = NA)
dev.off()
write.csv(Humm,"distance_matrix.csv", row.names = T, col.names  = T )

【问题讨论】:

    标签: r arrays


    【解决方案1】:

    我想你可能需要adist 来获取距离矩阵,例如,

    adist(randomDNA)
    

    【讨论】:

      猜你喜欢
      • 2020-03-13
      • 1970-01-01
      • 2018-08-07
      • 2017-06-09
      • 2019-02-01
      • 1970-01-01
      • 2013-12-16
      • 2014-08-15
      • 1970-01-01
      相关资源
      最近更新 更多