将dist对象列表保存到R中的表中

将dist对象列表保存到R中的表中,r,matrix,export,distance,R,Matrix,Export,Distance,我需要创建一个文件,其中包含多个用空行分隔的距离矩阵。 输出应如下所示: # First matrix 0.05194497 0.04652118 0.12935323 0.04269506 0.09953116 0.08464824

我需要创建一个文件,其中包含多个用空行分隔的距离矩阵。 输出应如下所示:

# First matrix
0.05194497                                                       
0.04652118 0.12935323                                            
0.04269506 0.09953116 0.08464824                                 
         NA         NA         NA         NA                      
0.02884847 0.07769535 0.05385956 0.04588298         NA           
0.03821721 0.12084543 0.13431270 0.06928795         NA 0.05123967
# Empty line

# Second matrix
0.05194497                                                       
0.04652118 0.12935323                                            
0.04269506 0.09953116 0.08464824                                 
        NA         NA         NA         NA                      
0.02884847 0.07769535 0.05385956 0.04588298         NA           
0.03821721 0.12084543 0.13431270 0.06928795         NA 0.05123967
5.70181650842794    
6.01311946994002 5.03206860827638   
7.27690516432265 5.32547302778382 5.8118611864786  
6.61929500038789 5.3067497799772 4.94598733972826 6.61208111472781 
NULL



7.46956498920544    
5.7173301814994 6.40770896281359   
5.37134559156135 6.10683846835378 5.05751911328028  
6.02976206855185 6.25670324709768 4.68526645722475 5.45283785882534 
NULL

我在R中的列表中有100个距离矩阵,我需要将它们导出到txt文件,如上面的示例所示。有人知道怎么做吗?我需要一个文件,而不是多个txt文件。

这里有一个使用
sink
lappy
dput
的选项。为了在
dist
对象上使用
write.table
,它需要是一个矩阵,因此在
lappy
步骤中,我们将其转换为矩阵,然后在写入输出之前手动将对角线和上三角形设置为
NA

以下是一些示例数据:

set.seed(1)
x <- matrix(rnorm(100), nrow = 5)
y <- matrix(rnorm(100), nrow = 5)
myList <- list(A = dist(x),
               B = dist(y))
myList
# $A
#          1        2        3        4
# 2 5.701817                           
# 3 6.013119 5.032069                  
# 4 7.276905 5.325473 5.811861         
# 5 6.619295 5.306750 4.945987 6.612081
# 
# $B
#          1        2        3        4
# 2 7.469565                           
# 3 5.717330 6.407709                  
# 4 5.371346 6.106838 5.057519         
# 5 6.029762 6.256703 4.685266 5.452838
打开“myDistList.txt”会让您看到如下内容:

# First matrix
0.05194497                                                       
0.04652118 0.12935323                                            
0.04269506 0.09953116 0.08464824                                 
         NA         NA         NA         NA                      
0.02884847 0.07769535 0.05385956 0.04588298         NA           
0.03821721 0.12084543 0.13431270 0.06928795         NA 0.05123967
# Empty line

# Second matrix
0.05194497                                                       
0.04652118 0.12935323                                            
0.04269506 0.09953116 0.08464824                                 
        NA         NA         NA         NA                      
0.02884847 0.07769535 0.05385956 0.04588298         NA           
0.03821721 0.12084543 0.13431270 0.06928795         NA 0.05123967
5.70181650842794    
6.01311946994002 5.03206860827638   
7.27690516432265 5.32547302778382 5.8118611864786  
6.61929500038789 5.3067497799772 4.94598733972826 6.61208111472781 
NULL



7.46956498920544    
5.7173301814994 6.40770896281359   
5.37134559156135 6.10683846835378 5.05751911328028  
6.02976206855185 6.25670324709768 4.68526645722475 5.45283785882534 
NULL

当然,
capture.output(myList,file=“myDistList.txt”)
也可以让您非常接近所需的输出——但这就像您将
myList
打印到屏幕上一样(也就是说,它将包括行名和列名)。不过,如果您决定采用这种方式,一些聪明的正则表达式工作应该能够轻松地删除多余的行

例如,使用“”作为我的文本编辑器输出
capture.output
,我可以使用以下搜索和替换选项(当然选择了“使用正则表达式”)清理文本文件:

  • 搜索
    ^\s+.*.^\$.
    并替换为单个空格
  • 搜索
    ^[0-9]+\s(+.*)
    并替换为
    \1

  • 在某种程度上,我更喜欢这种方法,而不是必须返回并将距离矩阵转换为矩阵等等。

    为了澄清:您不希望输出中有行名和列名,对吗?你的名单是命名名单吗?是的,正确。纯粹的价值观。行/列的顺序决定了它们的标识