生成一个函数

时间:2013-10-25 08:12:14

标签: r

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

我有可能将其创建为函数吗?

4 个答案:

答案 0 :(得分:6)

您可以在命名向量中查找颜色,您可以有效地执行此操作...

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

答案 1 :(得分:5)

这就是为什么你的代码错了,以及它的作用:

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

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

myFunction <- function(colour){

开始使用一个参数colour定义一个新函数。

colourName = data

创建另一个名为colourName的新变量(单个=符号与&lt; - 符号相同),并为其赋予data的值。此colourName变量仅在函数内可见。所以现在你在函数中有一个colourName变量,其值为c(1,2,3,4,5,6),因为它是函数外部的data副本。

return(colour)
}

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

myFunction("red")

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

我知道这并没有完全回答你如何获得所需颜色的数字的问题,但是你很清楚地不了解很多编程的基础知识,所以我希望这会有所帮助。 / p>

答案 2 :(得分: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"]]

更新:Vectorised提供与@ SimonO101的答案相同的效率。请注意,此解决方案(以及来自@ SimonO101的第二个解决方案)不需要您定义函数。

答案 3 :(得分:0)

somevector <- c("red","blue","green")
datavector <- c(1,2,3)
mycolour <- function(whichcolour)
{
   grep(x = somevector, pattern = whichcolour)
}

输出 -

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