2013-10-25 14 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日間同じようにRを使用しています.. – 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の2番目のソリューション)では、関数を定義する必要はありません。あなたはそうのように効率的に行うことができますという名前のベクトル、のあなたの色(複数可)をルックアップすることができ

+1

これは@ SimonO101の答えを超えて何が追加されますか? – Thomas

+0

'setNames(seq_along(colourName)、colourName)'でちょっと整理できます。 – hadley

+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 
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

はここにあなたのコードが間違っている理由だし、それが何をするか:

それらの値を持つベクトルとして2つの変数を設定します
colourName<-c("red", "green", "blue", "yellow", "white", "black") 
data <- c(1,2,3,4,5,6) 

myFunction <- function(colour){ 

colourの1つのパラメータで新しい関数を定義し始めます。 colourNameと呼ばれる別の新しい変数、作成

colourName = data 

(シングル=記号は<同じである - 記号)及びそれにdataの値を与えます。このcolourName変数は、関数内でのみ表示されます。関数dataが関数外にあるので、値がc(1,2,3,4,5,6)の関数に変数colourNameがあります。

return(colour) 
} 

これは、機能の結果としてcolourの値を返します。これはmyFunction <- function(colour){のパラメータと同じで、colour変数を変更していないので、入力した内容を戻すだけです!

myFunction("red") 

これは"red"に引数colourの値を設定し、関数を呼び出します。今度は関数コードを見てください。それで、[1] "red" - 入力と同じベクトルを表示するはずです。

これは、あなたが望む色の番号を取得する方法についてのあなたの質問に完全には答えていませんが、プログラミングの基礎を理解していないことが分かりました。

+3

+1これは答えがあったはずです。徹底した説明。 –

関連する問題