写出"的结果"进入R

时间:2016-04-20 17:57:14

标签: r matrix

我想写一个 for 的结果我已经设计了每个步骤的矩阵或数据帧(后来将该矩阵或数据帧转换为CSV文件)。

我的代码如下

我希望矩阵/数据框有 3列

for (i in 1:100) {
  for (j in 2:100)
  {
    if (i<j) {
      temp <- pairwiseAlignment(protein_dat[i,], protein_dat[j,],substitutionMatrix=BLOSUM62,type="local")
      ###save i value into column 1 [or Seq1 in the data frame I made below]
      ###save j value into column 2 [or Seq2]
      ###save temp@score into column 3 [or into Score]
      ###go to next row of the dataframe to save the next result
    }

我该怎么做?

编辑#1

我制作了如下数据框:

df <- data.frame(Seq1=as.numeric(),
                 Seq2=as.numeric(), 
                 Score=as.numeric(), 
                 stringsAsFactors=FALSE) 

编辑#2

这是正确的方法吗?

for (i in 1:100) {
  for (j in 2:100)
  {
    if (i<j) {
      t <- pairwiseAlignment(protein_dat[i,], protein_dat[j,],substitutionMatrix=BLOSUM62,type="local")
      df <- rbind(df, c(i,j,t@score))
    }
  }
}

1 个答案:

答案 0 :(得分:1)

假设临时存储&#34;标量&#34; (长度为1的向量)数值,试试这个:

# preallocate matrix
dataMat <- matrix(0, (100*100/2), 3)
dataRow <- 0

for (i in 1:100) {
  for (j in 2:100) {
    if (i < j) {
      # increment data row
      dataRow <- dataRow + 1

      temp <- pairwiseAlignment(protein_dat[i,], protein_dat[j,],
                                substitutionMatrix=BLOSUM62,type="local")

  dataMat[dataRow, ] <- c( i, j, temp)
}

如果以不同方式访问值,您可以相当轻松地进行这些调整。完成后,您可以将dataMat转换为data.frame:

myDataFrame <- data.frame(dataMat)
# give it some names
names(myDataFrame) <- c("iVal", "jVal", "tempVal")

编辑:感谢@ 42-代替了一个不错的代码。