4

次の例を検討してください。

q1.func <- function(x) {
  num <- (cos(30.2 * x^(1/2)))^2 
  denom <- (x^0.7) * exp(0.9*x)

  num / denom
}

method1 <- function(n) {
  x <- runif(n,min = 0, max = 1.7)
  f <- q1.func(x)  

  (1.7) * sum((1/n) * f)
} 

draw.graph <- function() {
  n <- seq(1,1000,1)
  x <- c()
  for(i in 1:length(n)) {
    x <- append(x, method1(n[i]))
  }
  plot(n, x, type = "p", xlab = "N",ylab = "value" ,main = "method1 plot",col = "black")
}

私のポイントは、 draw.graph(method1(n))を実行できるようにしたいということです。しかし、Rは私にそれをさせませんでした。なぜこれが起こっているのかわかりませんか?私の最終的な目標は、 method2 / method3 /.... を draw.graph() 関数の引数として渡すことができるようにすることです。しかし、どのように??? 今のところ、メソッド 1 を draw.graph 関数の引数として渡すことができるソリューションにのみ関心があります。draw.graph 関数内に method1 を書くように頼まないでください。しかし、メソッド 1 を draw.graph 関数の引数として渡すことにもっと興味があります。ありがとう

4

2 に答える 2

5

要点を説明するために、より簡単な例を作成します (提案したコードには他にも問題があります)。

fun1 = function(x) cos(x)
fun2 = function(x) sin(x)

# function where one argument is a function
wrapper = function(a = 2, fun = fun1){

  x = 1:10
  return(data.frame(x = x, y = a*fun(x)))
}

# testing behaviour
wrapper()
wrapper(fun = fun2)
于 2012-11-21T08:07:57.080 に答える
5

draw.graph関数に引数がありません。関数の戻り値を単に次の関数の引数として使用しないのはなぜですか?

draw.graph <- function(y) {
  plot(seq_along(y), y)
}

method1 <- function(n) {
  return(runif(n, min=0, max=1.7))
}

draw.graph(method1(100))

引数として関数が本当に必要な場合は、次を試すことができます (をお読みください?match.fun)。

## stupid example
calc <- function(x, fun) {
  fun <- match.fun(fun)
  return(fun(x))
}

calc(1:10, sum)

編集: OPの質問/コメントを満たすために、この特定の例を追加します:

q1.func <- function(x) {
  num <- cos(30.2 * sqrt(x))^2
  denom <- x^0.7 * exp(0.9*x)
  return(num/denom)
}

method1 <- function(n) {
  x <- runif(n, min=0, max=1.7)
  return(1.7*sum(1/n*q1.func(x)))
}

draw.graph <- function(n, fun) {
  fun <- match.fun(fun)
  y <- unlist(lapply(n, fun))
  plot(n, y)
}

draw.graph(1:1000, method1)

ここに画像の説明を入力

于 2012-11-21T08:08:45.220 に答える