我想写一个 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))
}
}
}
答案 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-代替了一个不错的代码。