2013-10-25 53 views
6

我对R很新,想知道函数是如何创建的。生成函数

说,如果我有:

> 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()函数,其中返回结果作为数字载体?

所以,如果我下面键入下面,我应该得到:

> myColour("yellow") 
[1] 4  

请帮助..

我的代码(但它的错!)

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") 

是否有可能我可以创建它作为一种功能吗?

+1

你能分享一下你到现在为止所尝试过的吗? – TheComeOnMan

+0

对不起,因为这是我第一次,我不知道。我已经加载了我的代码,但其不正确.. – user2914874

+3

@Diego Jimeno我做了我的研究,我相信我有权提出问题。这对你来说可能很简单,但我只用了3天的时间。 – user2914874

回答

1

我想在这里你的困难是,你并不需要的功能,而你需要一个名为向量

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

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"]] 

UPDATE:矢量化给予相同的效率水平从@ SimonO101的答案。请注意,此解决方案(和来自@ SimonO101的第二个解决方案)不需要您定义函数。

+1

这是如何添加@ SimonO101的答案之外的任何内容? – Thomas

+0

你可以用'setNames(seq_along(colourName),colourName)'清理一下。 – hadley

+0

@hadley *正是*我的答案。 –

6

你可以在一个名为向量,它可以有效地做像这样查找你的颜色(S)...

x <- setNames(seq_along(colourName) , colourName) 
#red green blue yellow white black 
# 1  2  3  4  5  6 

x[ 'red' ] 
#red 
# 1 

使用功能在这里似乎并不像一个伟大的事,但如果你愿意,你可以有一个简单的查找功能这样的,这需要颜色的矢量和查找值(但你可能也只是使用which !!)......

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 
0
somevector <- c("red","blue","green") 
datavector <- c(1,2,3) 
mycolour <- function(whichcolour) 
{ 
    grep(x = somevector, pattern = whichcolour) 
} 

输出 -

> datavector[mycolour("green")] 
[1] 3 
5

这就是为什么你的代码是错误的,它做什么:

colourName<-c("red", "green", "blue", "yellow", "white", "black") 
data <- c(1,2,3,4,5,6) 

,设置两个变量与这些价值观的载体。

myFunction <- function(colour){ 

开始用一个参数定义一个新功能,colour

colourName = data 

创建另一个名为colourName新的变量,(单=符号是一样的< - 符号),并赋予它的data值。这个colourName变量只在函数内部可见。因此,现在您的函数中有一个colourName变量,其值为c(1,2,3,4,5,6),因为它的函数外部是data的副本。

return(colour) 
} 

这返回作为该函数结果的值colour。由于这与myFunction <- function(colour){中的参数相同,因此您尚未更改colour变量,因此您只需回到您放入的内容即可!

myFunction("red") 

这调用该函数,参数colour的值设置为"red"。现在查看功能代码,然后您应该看到它将打印[1] "red" - 与输入相同的矢量。

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

+3

+1这是答案应该是。彻底和有益的解释。 –