所以现在写一下我在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的新手,我不确定我到底哪里出错了。任何帮助将不胜感激!
答案 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 ")".
这通常找不到插入遗失的确切位置,但它很快就会显示你肯定有问题然后通常很容易找到。