返回用户自定义函数的问题(从头学R)

问题描述 投票:0回答:1

自 9 月份以来,我正在自学 R 编程,并且正在参加 Educative 的免费初学者课程。在关于创建函数并返回其他任务的输出的会议中,我遇到了一个我真的不理解解决方案的练习。我想知道是否有人可以向没有编程背景的人解释这一点?

问题陈述

实现一个函数“evenOdd”,它将数字“向量”作为输入并返回一个“向量”,其中输出“向量”的每个元素都具有字符串“偶数”或“奇数”,具体取决于输入的相应元素矢量。

输入

包含要测试的“向量”的“testVariable”。

输出

一个“向量”,其中每个元素是“偶数”或“奇数”,具体取决于输入“testVariable”向量的相应元素的状态。

示例输入

测试变量<- c(78, 100, 2)

示例输出

“偶”“偶”“偶”

他们给出的解决方案:(我也附上了图片)

evenOdd <- function(testVariable) 
{
  output <- vector("character", 0) # initializing an empty character vector

  for(v in testVariable)
  {
    if(v %% 2 == 0)
    {
      # Insert even in vector if conditional statement satisfied
      output <- c(output, "even") 
    }
    else
    {
      # Insert odd in vector if conditional statement not satisfied
      output <- c(output, "odd")
    }
  }
  return(output) # returning the output vector. 
  # You can also simply write output here.
}

# Driver Code
evenOdd(c(78, 100, 2))

我理解 for 循环和 if...else 语句,但我不理解的是代码“输出 <- vector("character", 0)" on line 3, why you have to define that? I'm not sure what does "initializing an empty character vector" mean, they never covered that in the course. Secondly, why they have to define output again with the code " output <- c(output, "even")" in line 10 and 15? Also, I suppose a vector can only contain values of the same type? Why is there a String and an Integer in the same vector (as in line 3)? I would really appreciate it if someone can elaborate and explain the solution. Thank you!

我尝试不包含输出,但它不起作用。

r windows function vector return
1个回答
0
投票

他们提供的“解决方案”不太“像R”。

函数最好像这样写

evenOdd <- function(x) ifelse(x%%2==0, "even", "odd")

问题是一次附加一个元素并不是最有效的方法。

跑步时

output <- vector("character", 0)

他们定义了一个名为

output
的变量,它指向一个空字符向量。 (您可能还会看到有时写为
output <- c()
)。但重点是,您需要初始化变量,以便 R 知道在哪里存储内容。如果您没有该行,然后 R 尝试运行该命令

output <- c(output, "even") 

它不知道

output
是什么,因此无法执行
c(output, "even")
,即将“事件”的值附加到向量
output
,因为向量
output
不存在。

同样,大多数经常使用 R 的人永远不会以这种方式编写代码。我可能不相信该课程的其余部分。

© www.soinside.com 2019 - 2024. All rights reserved.