【问题标题】:Trying to write an R function: is it the For Loop or the numeric vector that doesn't work?尝试编写 R 函数:是 For 循环还是数字向量不起作用?
【发布时间】:2019-12-23 07:28:32
【问题描述】:

我有这样的功能(见下文),我真的不明白为什么它不起作用。

for 循环本身,当单独运行时(不在函数内部)运行良好,但无论输入值如何,函数总是返回一个空向量。我正在对 c(3, 0, 4, 0, 99) 作为代码进行测试,它应该返回 c(5, 0, 4, 0, 99)。 (one 和 twos 工作正常,并且已经在之前的任务中测试过)。

run_code <- function(code, input) {

  opcode <- which(code %in% c(1, 2, 3, 4, 99))
  input <- input
  for (i in opcode) {                  
    if (code[i] == 1) {                                                   
      code[code[i+3]+1] <- code[code[i+1]+1] + code[code[i+2]+1]
    } else {
      if (code[i] == 2) {
        code[code[i+3]+1] <- code[code[i+1]+1] * code[code[i+2]+1]
      } else {                                                           
        if (code[i] == 3) {
          code[code[i+1]+1] <- input
        } else {
          if (code[i] == 4) {
            return(code[code[i+1]])
          } else {                                                      
            if (code[i] == 99) {
              break
            }
          }
        }
      }
    }
  }
  return(code)
}

【问题讨论】:

  • 你能解释一下run_code这个函数应该做什么吗?什么是codeinput 参数,它们应该返回什么输出?
  • 在这种情况下,code 应该是一个数字向量,其中 1、2、3、4 和 99 代表覆盖(更改)数字向量本身的指令。 run_code 函数应该实现这些更改并返回更改后的数字向量 (code)。 input 是任务指令给出的一些输入值,它告诉函数在(循环的)开始时要做什么。除了函数内部之外,一切似乎都可以自行运行。

标签: r function for-loop vector


【解决方案1】:

运行以下代码:

run_code <- function(code, input) {
opcode <- which(code %in% c(1, 2, 3, 4, 99))
for (i in opcode) {                  
    if (code[i] == 1) {                                                   
        code[code[i+3]+1] <- code[code[i+1]+1] + code[code[i+2]+1]
    } else {
        if (code[i] == 2) {
            code[code[i+3]+1] <- code[code[i+1]+1] * code[code[i+2]+1]
        } else {                                                           
            if (code[i] == 3) {
                code[code[i+1]+1] <- input
            } else {
                if (code[i] == 4) {
                    code[i] = code[i+1]
                    return(code)
                } else {                                                      
                    if (code[i] == 99) {
                        break
                    }
                }
            }
        }
    }
}

return(code)
}

a = run_code(code = c(3, 0, 4, 0, 99), input = 1)

但主要问题是什么?我认为return(code[code[i+1]]) 这行不正确。您尝试返回一个值而不是向量代码。我不确定是否真的为您的目的更改您的代码。但是,当您尝试在函数中返回标量值时,它不会完全返回代码向量。 最好的问候。

【讨论】:

  • 感谢您的帮助,但这仍然是我得到的:&gt; run_code(code = c(3, 0, 4, 0, 99), input = 1) numeric(0)
  • 是的,return[...] 是问题所在。将其更改为“打印”。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多