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
fnfn=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])
insideapply
call。他已经注意到在i:n
中使用j不做上三角。他已经注意到在i:n
中使用j不做上三角。