首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >生成函数

生成函数
EN

Stack Overflow用户
提问于 2013-10-25 16:12:14
回答 4查看 173关注 0票数 6

我是R的新手,想知道函数是如何创建的。

如果我有,请告诉我:

代码语言:javascript
复制
> colourName
 [1] "red" "green" "blue" "yellow" "white" "black"

 #Which the following colours equal something like this:
 #red = 1
 #green = 2
 #blue = 3 
 #yellow = 4
 #white = 5
 #black = 6

如何创建一个名为myColour()的函数,其中结果以数值向量的形式返回?

因此,如果我键入以下内容,我应该会得到:

代码语言:javascript
复制
> myColour("yellow")
[1] 4    

请帮帮我..

我的代码(但它是错误的!)

代码语言:javascript
复制
colourName<-c("red", "green", "blue", "yellow", "white", "black")
data <- c(1,2,3,4,5,6)

myFunction <- function(colour){
colourName = data
return(colour)
}
myFunction("red")

有没有可能把它创建成一个函数?

EN

回答 4

Stack Overflow用户

发布于 2013-10-25 16:30:50

你可以在一个命名向量中查找你的颜色,你可以像这样高效地完成这项工作。

代码语言:javascript
复制
x <- setNames( seq_along( colourName ) , colourName )
#red  green   blue yellow  white  black 
#  1      2      3      4      5      6 

x[ 'red' ]
#red
#  1 

在这里使用一个函数似乎不是一件很好的事情,但是如果你愿意,你可以有一个简单的查找函数,像这样,它接受一个由颜色和查找值组成的向量(但你也可以使用which!!)

代码语言:javascript
复制
myFunction <- function( colours , x){
  y <- which( colours %in% x )
  if( length(y) == 0L )
    y <- "Colour not found"
  return( y )
}

myFunction( colourName , "red")
[1] 1

#  Using R's inbuilt colour names
myFunction( colours() , "purple")
[1] 547
票数 6
EN

Stack Overflow用户

发布于 2013-10-25 17:45:06

下面是你的代码出错的原因,以及它的作用:

代码语言:javascript
复制
colourName<-c("red", "green", "blue", "yellow", "white", "black")
data <- c(1,2,3,4,5,6)

将两个变量设置为具有这些值的向量。

代码语言:javascript
复制
myFunction <- function(colour){

这将开始定义一个带有一个参数colour的新函数。

代码语言:javascript
复制
colourName = data

这将创建另一个名为colourName的新变量(单号=与<-号相同),并将其值设为data。此colourName变量仅在函数内部可见。现在你在函数中有一个colourName变量,它的值是c(1,2,3,4,5,6),因为它是来自函数外部的data的副本。

代码语言:javascript
复制
return(colour)
}

这将返回colour的值作为函数的结果。由于这与myFunction <- function(colour){中的参数相同,并且您没有更改colour变量,因此您将只得到您输入的内容!

代码语言:javascript
复制
myFunction("red")

这将调用该函数,将参数colour的值设置为"red"。现在浏览一下函数代码,您应该会看到它将打印[1] "red" -一个与输入相同的向量。

我知道这并没有完全回答你如何获得你想要的颜色的数字的问题,但你显然没有理解很多编程的基础知识,所以我希望这能有所帮助。

票数 5
EN

Stack Overflow用户

发布于 2013-10-25 16:24:15

我想您在这里的困难在于您不需要函数,而是需要一个命名向量

您可以为您的示例构建一个向量,如下所示。可能有更快的方法来做到这一点,但我希望这种方法是明确的:

代码语言:javascript
复制
colourName=c("red","green","blue","yellow","white","black")
# Initialise a vector of numbers
colours=1:length(colourName)
# Name the vector elements according to the number-name relationship you're after
names(colours)=colourName
# See what the vector looks like
colours
# Try it out
colours["yellow"]
colours[["yellow"]]

更新:矢量化后的效率与@SimonO101的答案相同。请注意,此解决方案(以及@SimonO101中的第二个解决方案)不需要您定义函数。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19584517

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档