2017-09-18 16 views
2

私は関数型の使用にはあまり慣れていないので、ggplotを使用することはできません。ggplotでの関数型プログラミングの使用

function_factory <- function(x){ 
    times <- function(y) x * y 
} 

simple_application <- function(z1, z2){ 
    times_z1 <- function_factory(z1) 
    times_z2 <- function_factory(z2) 
    times_z1(3) * times_z2(3) 
} 

simple_application(3, 3) 

をしかし、これにはない:

何らかの理由で、この作品

plot_times <- function(z1, z2){ 
    times_z1 <- function_factory(z1) 
    times_z2 <- function_factory(z2) 
    library(ggplot2) 
    ggplot(data = data.frame(x = 0), mapping = aes(x = x)) + 
    stat_function(fun = "times_z1", xlim = c(1, 1000)) + 
    stat_function(fun = "times_z2", xlim = c(1, 1000)) 
} 


plot_times(3, 4) 

私は次のエラーを取得:

> plot_times(3, 4) 
Warning messages: 
1: Computation failed in `stat_function()`: 
object 'z1' not found 
2: Computation failed in `stat_function()`: 
object 'z2' not found 

私はさらにいくつかの合併症を持っているが、私はこれを解決できれば私自身の問題も解決できることを願っています。 ' これは環境と関係していると確信していますが、修正方法を理解できません。

を持つ関数の工場から、これはうまく機能注:stat_function

times_three <- function(x) 3 * x 
times_four <- function(x) 4 * x 
ggplot(data = data.frame(x = 0), mapping = aes(x = x)) + 
    stat_function(fun = "times_three", xlim = c(1, 1000)) + 
    stat_function(fun = "times_four", xlim = c(1, 1000)) 
+1

、 'times_three'と' times_four'は関数です。 plot_times関数には、オブジェクトがあります。私は、stat_functionに 'fun'パラメータに渡す関数が必要だと思っています。 – ira

+1

予想よりも簡単です。引用符を取り除くだけです。 'fun = times_z1'が動作します。 –

+0

イラとルイ・バラダスありがとう。うわー、それは本当に引用符を削除するために働いた。これは数時間私を困らせている。 – Fridriksson

答えて

2

"function"を送るないが、get("function")を取得した結果。たとえば、stat_function(fun = "times_z1", xlim = c(1, 1000))の代わりにstat_function(fun = get("times_z1"), xlim = c(1, 1000))の代わりに。

plot_times <- function(z1, z2){ 
    library(ggplot2) 
    times_z1 <- function_factory(z1) 
    times_z2 <- function_factory(z2) 
    ggplot(data = data.frame(x = 0), mapping = aes(x = x)) + 
    stat_function(fun = get("times_z1"), xlim = c(1, 1000)) + 
    stat_function(fun = get("times_z2"), xlim = c(1, 1000)) 
} 

結果:コードの最後のチャンクで

plot_times(3, 4) 

enter image description here

関連する問題