我是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")
我有可能将其创建为函数吗?
答案 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