R If语句条件错误在二和问题中缺少值?

R If语句条件错误在二和问题中缺少值?,r,function,for-loop,if-statement,indexing,R,Function,For Loop,If Statement,Indexing,我正在为面试练习问题,遇到了一个“如果”的问题,我不知道如何解决。实务问题如下: 两个和。给定一个数组和一个数字N,如果数组中有数字a、B,且a+B=N,则返回True。否则,返回False 例如: [1,2,3,4],5⇒ 真的 [3,4,6],6⇒ 假的 我的代码(如下)返回以下错误:if(i+A[j]==N)中的错误{:缺少需要TRUE/FALSE的值 fun = function(A,N) { flag = FALSE for (i in A) { for (j in i

我正在为面试练习问题,遇到了一个“如果”的问题,我不知道如何解决。实务问题如下:

两个和。给定一个数组和一个数字N,如果数组中有数字a、B,且a+B=N,则返回True。否则,返回False

例如:

[1,2,3,4],5⇒ 真的

[3,4,6],6⇒ 假的

我的代码(如下)返回以下错误:if(i+A[j]==N)中的错误{:缺少需要TRUE/FALSE的值

fun = function(A,N) {
  flag = FALSE
  for (i in A) {
    for (j in i:length(A)) {
      if (i + A[j] == N) {
        flag = TRUE
      } 
    }
  }
  return(flag)
}

fun(as.integer(c(3, 4, 6)),6)

无循环的矢量化解决方案:

sumN <- function(A,N){
  any(colSums(combn(A,2))==N)
}

sumN(c(1,2,3,4),5)
[1] TRUE

sumN(c(3,4,6),6)
[1] FALSE

sumN代码中的问题是
for
的第二个
循环应该是
1:length(A)
而不是
i:length(A)


虽然这不是非常有效,因为它会对某些对进行两次双重检查。

谢谢。我这样做的原因是没有对对对进行双重计数;对为什么I:length(A)不起作用有什么评论吗?另外,输出应该是false,而不是true(参见示例)。不客气。我在最初的回答中提到了为什么
I:length(A)
不起作用。我已经更新了我的答案,使这个函数不会对同一个元素求和。啊,非常感谢!受你答案的启发,我得出了以下结论:
fun=function(A,N){m=length(A)flag=FALSE for(I in 1:m){for(j in I:m){if(A[I]+A[j]=N&I!=j){flag=TRUE}返回(标志)}
干得好!继续学习。我建议学习@Waldi的答案,因为
R
中的许多问题都可以在不使用
for
循环的情况下解决。矢量化是一个强大的工具。干净!我花了一段时间才理解,但我学到了很多!我试图提高投票率,但我的声誉还不够好。我希望这对我来说能起作用现在:^很高兴你花时间去理解:只要你能,矢量化而不是循环-更有效!
fun <- function(A, N){
  flag = FALSE
  for (i in A) {
    for (j in 1:length(A)) {
      if (i + A[j] == N) {
        flag = TRUE
      } 
    }
  }
  
  return(flag)
}

fun(as.integer(c(3, 4, 6)), 6)
[1] TRUE
fun <- function(A, N){
  flag = FALSE
  for (i in A) {
    for (j in A[A != i]) { # select elements of A that aren't equal to i
      if (i + j == N) {
        flag = TRUE
      } 
    }
  }
  
  return(flag)
}