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

有没有一种可能的方法可以将它创建为一个函数?

4

4 回答 4

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
于 2013-10-25T08:30:49.583 回答
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)
}

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

myFunction("red")

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

我知道这并不能完全回答您关于如何获得所需颜色的数字的问题,但您显然还没有了解很多编程基础知识,所以我希望这会有所帮助。

于 2013-10-25T09:45:05.913 回答
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"]]

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

于 2013-10-25T08:24:14.513 回答
0
somevector <- c("red","blue","green")
datavector <- c(1,2,3)
mycolour <- function(whichcolour)
{
   grep(x = somevector, pattern = whichcolour)
}

输出 -

> datavector[mycolour("green")]
[1] 3
于 2013-10-25T08:51:44.217 回答