Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将read.table的输出转换为dist将正确解释的向量向量?_R - Fatal编程技术网

如何将read.table的输出转换为dist将正确解释的向量向量?

如何将read.table的输出转换为dist将正确解释的向量向量?,r,R,我试图准备一个dist结构,用于R中的一个集群库。输入是一个包含固定大小整数向量的文件。这是一个示例输入,尽管实际输入的每行中有7列以上 54540,22060,52234,49984,34093,16412,46758 47075,41863,26267,8577,45153,6133,31558 33741,50895,45860,49942,47074,30793,10483 24437,5884,44081,34891,41438,23705,30392 28575,50826,3672

我试图准备一个
dist
结构,用于R中的一个集群库。输入是一个包含固定大小整数向量的文件。这是一个示例输入,尽管实际输入的每行中有7列以上

54540,22060,52234,49984,34093,16412,46758
47075,41863,26267,8577,45153,6133,31558
33741,50895,45860,49942,47074,30793,10483
24437,5884,44081,34891,41438,23705,30392
28575,50826,36723,27807,28152,31804,3303
12936,26572,5576,1758,5484,12165,19950
2086,33345,4810,15722,594,34,15562
19701,46650,38306,33724,24992,55188,53023
我想读入它们,让R将它们解释为向量,然后将向量传递给
myfun
,以计算编辑距离作为距离度量。 但是,
数据
似乎没有适当的格式,因此使用不正确的参数调用了
myfun

我目前有以下代码

library(cluster)                                                   
library(proxy)                                                     

myfun <- function(x,y) {                                           
  numDiffs <- 0;                                                   
  for (i in x) {                                                   
    if (x[i] != y[i])                                              
       numDiffs <- numDiffs + 1;                                   
  }                                                                
  return(numDiffs);                                                
}                                                                  
summary(pr_DB)                                                     

pr_DB$set_entry(FUN = myfun, names = c("myfun", "vectorham"))      
pr_DB$get_entry("MYFUN")                                           

data <- read.table("Sample.txt", header=FALSE, sep=",")            

x <- dist(x = data, method = "MYFUN")                             
库(集群)
图书馆(代理)

myfun问题在于(i in x){
的行
。我想你的意思是(i in seq_沿(x)){
的行
。无论如何,试着用这个代替:

myfun <- function(x,y) sum(x != y)

我认为这是正确的。

问题在于(I in x){
的行
。我想你的意思是(I in seq_沿(x)){
。无论如何,试着用这个代替:

myfun <- function(x,y) sum(x != y)

我认为这是正确的。

这有两个问题:

  • 如果myfun中的x和y的长度不同,则可能会在需要TRUE/FALSE的地方得到缺少的值,因为其中一个将是N/A

  • 据我所知,Dist不接受您自己定义的函数。请参阅

  • 费迪南德所说的“x中的i”,他的建议很好


  • 矩阵实际上与向量向量没有任何区别。只需将行向量称为数据[rowNum,]。此外,“dist结构”只是一个矩阵。

    与此相关的问题如下:

  • 如果myfun中的x和y的长度不同,则可能会在需要TRUE/FALSE的地方得到缺少的值,因为其中一个将是N/A

  • 据我所知,Dist不接受您自己定义的函数。请参阅

  • 费迪南德所说的“x中的i”,他的建议很好


  • 矩阵实际上与向量向量没有任何区别。只需将行向量称为数据[rowNum],而且,“dist结构”就是矩阵。

    您可以将
    myfun
    定义为
    sum(x!=y)
    。您可以将
    myfun
    定义为
    sum(x!=y)
    。我的向量是固定长度的。不过我会先试试费迪南德的答案。
    myfun
    确实会被调用。他使用的是
    proxy::dist
    而不是
    stats::dist
    。我的向量是固定长度的。不过我会先试试费迪南德的答案。
    myfun
    确实会被调用。他使用的是
    proxy::dist
    而不是
    stats::dist>
    。表面上,此解决方案消除了错误。但是,R似乎仍然认为总共有10多个项目需要群集,即使我的小示例文件仅包含10个项目。表面上,此解决方案消除了错误。但是,R似乎仍然认为总共有10多个项目需要群集尽管我的小样本文件只包含10项。
    data <- read.table(header=FALSE, sep=",", text="
    54540,22060,52234,49984,34093,16412,46758
    47075,41863,26267,8577,45153,6133,31558
    33741,50895,45860,49942,47074,30793,10483
    24437,5884,44081,34891,41438,23705,30392
    28575,50826,36723,27807,28152,31804,3303
    12936,26572,5576,1758,5484,12165,19950
    2086,33345,4810,15722,594,34,15562
    19701,46650,38306,33724,24992,55188,53023
    ")
    
    library(cluster)                                                   
    library(proxy)                                                     
    
    myfun <- function(x,y) sum(x != y)
    
    summary(pr_DB)                                                     
    
    pr_DB$set_entry(FUN = myfun, names = c("myfun", "vectorham"))      
    pr_DB$get_entry("MYFUN")                                           
    
    
    x <- dist(x = data, method = "MYFUN") 
    
    > x
      1 2 3 4 5 6 7
    2 7            
    3 7 7          
    4 7 7 7        
    5 7 7 7 7      
    6 7 7 7 7 7    
    7 7 7 7 7 7 7  
    8 7 7 7 7 7 7 7
    > data
         V1    V2    V3    V4    V5    V6    V7
    1 54540 22060 52234 49984 34093 16412 46758
    2 47075 41863 26267  8577 45153  6133 31558
    3 33741 50895 45860 49942 47074 30793 10483
    4 24437  5884 44081 34891 41438 23705 30392
    5 28575 50826 36723 27807 28152 31804  3303
    6 12936 26572  5576  1758  5484 12165 19950
    7  2086 33345  4810 15722   594    34 15562
    8 19701 46650 38306 33724 24992 55188 53023