R 多元应用函数以成对方式比较一组文件

R 多元应用函数以成对方式比较一组文件,r,R,我有一个向量,它包含数据向量的名称,名为c(“tom.txt”、“tim.txt”、“Amy.txt”)。我的任务是:构建一个对称矩阵,最后看起来如下所示 > m tom.txt tim.txt amy.txt tom.txt 0 10 5 tim.txt 10 0 7 amy.txt 5 7 0 这些条目由一个名为get.result(vec1,vec2)的函数获得,

我有一个向量,它包含数据向量的名称,名为
c(“tom.txt”、“tim.txt”、“Amy.txt”)
。我的任务是:构建一个对称矩阵,最后看起来如下所示

> m
        tom.txt tim.txt amy.txt
tom.txt       0      10       5
tim.txt      10       0       7
amy.txt       5       7       0
这些条目由一个名为
get.result(vec1,vec2)
的函数获得,该函数在目录中查找两个文本文件的相应数据向量,并对它们执行一些操作,然后为矩阵中的每个位置返回一个值。例如,如果我想获取条目
m[“tom.txt”、“tim.txt”]
,我需要将“tom.txt”和“tim.txt”传递到
get.result(“tom.txt”、“tim.txt”)
。这个功能的内容并不重要

但是,如果我想计算所有条目的值,那么继续键入
get.result(“tom.txt”、“amy.txt”)、get.result(“tim.txt”、“amy.txt”)
将是一件非常繁琐的事情,尤其是当我实际处理100个不同的文本文件时

我的问题是:是否有一种有效的编程方法,使我始终将一个文本文件与其他文本文件进行比较(从不与自身进行比较),同时跟踪它们在矩阵中的位置

我是否应该在开始处用全零初始化矩阵,并将列名和行名设置为文本文件名?但在本例中,我不确定如何获取列名和行名,以便将它们传递到
get.result(vec1,vec2)

试试这个解决方案

fn <- c("tom.txt", "tim.txt" , "Amy.txt")

n <- length(fn)

m <- matrix(0, n, n)

rownames(m) <- fn
colnames(m) <- fn

for (i in 1:n) for (j in i:n) if (i!=j) {
  v <- get.result(fn[i], fn[j])
  m[i,j] <- v
  m[j,i] <- v
}

m
fn试试这个解决方案

fn <- c("tom.txt", "tim.txt" , "Amy.txt")

n <- length(fn)

m <- matrix(0, n, n)

rownames(m) <- fn
colnames(m) <- fn

for (i in 1:n) for (j in i:n) if (i!=j) {
  v <- get.result(fn[i], fn[j])
  m[i,j] <- v
  m[j,i] <- v
}

m

fn
fn=dir(pattern=“.txt”)
(如果需要,请更改模式)将为您提供目标文件夹中的文本文件。然后,您可以像前面的回答一样循环该列表。

fn=dir(pattern=“.txt”)
(如果需要,请更改模式)将为您提供目标文件夹中的文本文件。然后,您可以像前面的答案一样循环该列表。

函数提供向量元素的不同组合:

combs <-combn( c("tom.txt", "tim.txt" , "Amy.txt") , 2)
#----------------
     [,1]      [,2]      [,3]     
[1,] "tom.txt" "tom.txt" "tim.txt"
[2,] "tim.txt" "Amy.txt" "Amy.txt"

combs函数提供向量元素的不同组合:

combs <-combn( c("tom.txt", "tim.txt" , "Amy.txt") , 2)
#----------------
     [,1]      [,2]      [,3]     
[1,] "tom.txt" "tom.txt" "tim.txt"
[2,] "tim.txt" "Amy.txt" "Amy.txt"

combs假设您的文件名位于向量中,例如

vec <- c("tom.txt", "tim.txt" , "Amy.txt")

假设您的文件名在一个向量中

vec <- c("tom.txt", "tim.txt" , "Amy.txt")

可能需要将
get.result
替换为
function(x)get.result(x[1],x[2])
内部
apply
调用。可能需要将
get.result
替换为
function(x)get.result(x[1],x[2])
inside
apply
call。他已经注意到在i:n
中使用
j不做上三角。他已经注意到在i:n
中使用
j不做上三角。