0

所以现在写我正在用 R 编写一个函数,它查看以矩阵形式呈现的一组向量和两个测试向量,然后检查原始集合中的每个向量,并确定它更接近两个测试向量中的哪一个(或两者都不是),然后将三个数据集作为矩阵输出(向量更接近第一个测试,第二个测试,两者都不是)。我写了另一个函数,它只查看三个向量,然后给出第一个向量更接近哪个向量作为输出(这是更接近的函数)。它及其结果用于新功能。

这是更大功能的代码:

vectorwork <- function(mat,test1,test2){
  closer1 = ()
  closer2 = ()
  neither = ()
  y = dim(mat)[2]
  for(i in 1:(dim(mat)[1]){
    if(closer(mat[i,],test1,test2)==1){
      closer1[length(closer1)+1] = mat[i,]
    }
    else if(closer(mat[i,],test1,test2)==2){
      closer2[length(closer2)+1] = mat[i,]
    }
    else{
      neither[length(neither)+1] = mat[i,]
    }
  }
  close1 = matrix(closer1, (length(closer1)/y), y)
  close2 = matrix(closer2, (length(closer2)/y), y)
  neith = matrix(neither, (length(neither)/y), y)
print(close1,close2,neith)
}

我在整个代码中不断收到错误。由于我是 R 新手,所以我不确定我到底哪里出错了。任何帮助,将不胜感激!

4

2 回答 2

4

R 的基本原理之一是它利用了向量。这意味着您可以通过简单的比较对两个向量进行逐个元素的==比较:

x==a

所以,试试这个:

set.seed(1)
x <- sample(1:5, 10, replace=TRUE)
a <- sample(1:5, 10, replace=TRUE)
b <- sample(1:5, 10, replace=TRUE)

sum(x==a)
[1] 1
sum(x==b)
[1] 2

要进行最后一次比较,请&在评估中放置一个逻辑 AND 运算符:

sum(x!=a & x!=b)
[1] 7
于 2013-05-23T07:07:17.100 回答
0

你的问题是不平衡的括号。

  for(i in 1:(dim(mat)[1])     {
     ^       ^   C   C   ^    <--- innermost pair
     |       B           B    <- middle pair
     A                        <- outermost one is unpaired 

这是基本的。数数!

  for(i in 1:(dim(mat)[1]) ) {
                           ^
                           |
                        put it in

问题是,从您的帖子(“ paren errors ”)和评论(“ Error: unexpected '{' in:” for(i in 1:(dim(mat)[1]) { ") 看来,您显然已经知道问题出在哪里,而且您显然已经知道问题出在哪一行。鉴于此,您需要做的就是数到三。

这是我在检查括号时使用的一个小技巧;当我阅读时,我在击中每个“(”时数“1”,“2”。然后当我击中“)”时,我再次减去,随着我击中更多的“(”和“)”而上下移动。当我到达所有应该关闭的地方时,我最好点击 0

考虑你的违规行。计数必须在 "{" 之前达到零!可以?

  for(i in 1:(dim(mat)[1])     { 
     1       2   3   2   1     Nope. I'm short a ")".

这通常不会找到插入缺失的确切位置,但它很快表明您肯定有问题,然后通常很容易找到。

于 2013-05-23T08:16:30.680 回答