使用'创建函数;对于';环进R

使用'创建函数;对于';环进R,r,function,loops,for-loop,R,Function,Loops,For Loop,我才刚开始学R语言。我花了半天的时间试图写一个函数,我急切地想找到解决方案。如果有人真的很好,可以帮助我,并知道什么是解决办法,非常感谢:) 下面是解释,我必须创建一个函数f4 获取一个输入(数字)向量v和一个整数a 如果v中有两个数字加起来等于a,则返回TRUE,否则返回FALSE。 请注意,答案应该包括一个for循环 提示:让i=1。如果存在一个互补索引j,使得v[1]+v[j]==a,那么f1(v[2:n],a-v[1])必须返回TRUE。如果不是,则可以排除v[1],并且可以通过检查

我才刚开始学R语言。我花了半天的时间试图写一个函数,我急切地想找到解决方案。如果有人真的很好,可以帮助我,并知道什么是解决办法,非常感谢:)

下面是解释,我必须创建一个函数
f4

  • 获取一个输入(数字)向量
    v
    和一个整数
    a
  • 如果
    v
    中有两个数字加起来等于
    a
    ,则返回
    TRUE
    ,否则返回
    FALSE
    。 请注意,答案应该包括一个
    for
    循环
提示:让
i=1
。如果存在一个互补索引
j
,使得
v[1]+v[j]==a
,那么
f1(v[2:n],a-v[1])
必须返回
TRUE
。如果不是,则可以排除
v[1]
,并且可以通过检查
f1(v[3:n],a-v[2])
是否返回
TRUE
来查找
v[2]
的互补项。这个想法可以通过编写
f4
作为
f1(v[(i+1):n],a-v[i])
上的循环来迭代。 要检查我的答案:

打印(sapply(c(1,2,3,4,20),函数(x)f4(1:10,x))的输出是:

[1] FALSE FALSE  TRUE  TRUE FALSE
以下是我目前设法写的东西,但却被困了几个小时:

f4 <- function(v, a) {
  wow <- sort(unique(v))
  m <- outer(wow, wow, "+")
  diag(m) <- 0
  x <- vector("logical", length(a))
  for (i in 1:length(a)) {x[[i]] <- any((m==a[[i]]))}
  print(x)
}

f4不清楚预期的错误。您需要什么样的预期输出
sapply(c(1,2,3,4,20),函数(x)any(outer(1:10,1:10,
+
)==x))
如果我不够清楚,很抱歉:)我需要创建一个函数,例如“print(sapply(c(1,2,3,4,20),函数(x)f4(1:10,x))”的输出返回[1]FALSE FALSE TRUE FALSE,而到目前为止,我编写的函数返回以下输出:[1]FALSE[1]FALSE[1]TRUE[1]FALSE[1]FALSE FALSE TRUE FALSE为什么最后一个是
FALSE
。对我来说,它返回TRUE
sapply(c(1,2,3,4,20),函数(x)any(outer(1:10,1:10,
+
)==x))#[1]FALSE-TRUE
不清楚预期的值。您需要什么样的预期输出
sapply(c(1,2,3,4,20),函数(x)any(outer(1:10,1:10,
+
)==x))
如果我不够清楚,很抱歉:)我需要创建一个函数,例如“print(sapply(c(1,2,3,4,20),函数(x)f4(1:10,x))”的输出返回[1]FALSE FALSE TRUE FALSE,而到目前为止,我编写的函数返回以下输出:[1]FALSE[1]FALSE[1]TRUE[1]FALSE[1]FALSE FALSE TRUE FALSE为什么最后一个是
FALSE
。对我来说,它返回TRUE
sapply(c(1,2,3,4,20),函数(x)any(outer(1:10,1:10,
+
)==x))#[1]FALSE-TRUE