首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >多元应用函数比较,成对,一组文件

多元应用函数比较,成对,一组文件
EN

Stack Overflow用户
提问于 2013-08-14 18:01:36
回答 4查看 255关注 0票数 0

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

代码语言:javascript
复制
> 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)中。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-08-14 18:13:05

试试这个解决方案

代码语言:javascript
复制
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
票数 3
EN

Stack Overflow用户

发布于 2013-08-14 18:16:00

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

票数 1
EN

Stack Overflow用户

发布于 2013-08-14 19:44:48

combn函数为您提供了向量元素的不同组合:

代码语言:javascript
复制
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"

然后你可以:apply( combs, 2, get.result)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18238973

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档