需要帮助在R中使用Matrices

时间:2013-05-23 06:12:54

标签: r vector matrix parentheses

所以现在写一下我在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的新手,我不确定我到底哪里出错了。任何帮助将不胜感激!

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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 ”)和评论(“错误:意外'{'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 ")".

这通常找不到插入遗失的确切位置,但它很快就会显示你肯定有问题然后通常很容易找到。