2017-05-26 2 views
0

私は自分でいくつかの関数を作成していますが、ある関数から別の関数に返されたオブジェクト(値など)を使用するためには、まだ実行中です。例として:私は、この特定のケースでは、第二、明らかに機能を10の値を期待前の関数のオブジェクトを渡す方法

first(x = 5) + 
    second(y = 5) 

あなたは「+」でこれらの関数を呼び出すのであれば

first <- function(x){ 
return(x) 
} 

second <- function(y){ 
z <- x + y 
return(z) 
} 

...( )は、最初の()環境で後者が割り当てられているため、オブジェクトxを見つけることができません。

プログラミングのこのスタイルは、(ggplotに似ている)、例えば:

ggplot(aes(x = x, y = y), data = data) + 
    geom_point() 

私はプログラミングのこのタイプは、環境を使用することを意味知っているが、私はそれが仕事を得ることができません。助言がありますか?

ありがとうございます!

EDIT

私は私が思うに、それを考え出したgithubのパッケージをggplot探しに:たとえば

hh_first <- function(data) { 

    h <- structure(list(data = data), class = c("hh")) 

    h 
} 

"+.hh" <- function(e1, e2) { 

    add_hh(e1, e2) 

} 

add_hh <- function(h, object) { 

    h$data <- paste(h$data, object, sep = "") 
    h$data 

} 

hh_second <- function(data) { 

    data 

} 

を...

hh_first('Hi') + 
    hh_second(', how are you?') 

は、こんにちは」という文字列を返します。お元気ですか?'。この場合のプラス演算子は、クラス 'hh'のオブジェクトで動作します。 コードに関する提案やこの種のコードが生成する可能性のあるエラーの可能性は大歓迎です。

+0

再びこれを見た後ので、私は知っているとすれば、私は、あなたが探しているものを見逃しているかもしれ私は答えを削除または更新します。 –

+0

参照するggplotのパラダイムはかなり複雑です。実際には 'ggplot2 ::: add_ggplot'を追加するための特別な関数を使用しています。 – joran

+1

ggplot2パッケージは '+'オペレータをオーバーロードし、そのプロセスを複製するための指示は、適切なコードにディスパッチされる新しいクラスを作成することを伴います。ジェネリック関数を検索する必要があります。このリクエストは広すぎると思います。あなたがこのルートに行くことに決めたら、VenablesとRipleyの "S Programming"またはHadleyの "Advanced R"のいずれかを読んでください。 –

答えて

1

試してみてください。

first <- function(x){ 
    return(x) 
} 

second <- function(x ,y){ 
    z <- x + y 
    return(z) 
} 

second(first(5), 5) 

OR

myX <- first(5) 

second(myX, 5) 

OR

library(magrittr) # Which uses pipes, %>%, to pass the results of a function to the first variable of the second function 
first(5) %>% second(5) 
+2

あなたの関数を使うと、以下のように書くこともできます: 'library(magrittr);最初の(5)%>最初の%(5) ' –

関連する問題