25

R 関数がプロットを返さない、または印刷しないのはなぜですか? コードは以下です。プロットを除いて、すべてのコードは正常に動作しているようです。私が何をしても、関数が呼び出されたときにRにプロットを作成させることはできません。オンラインで調べてみると、これが機能しない理由が見つかりません。

powerc.fun <- function(n,sigma,r){

a <- 0.05
d <- seq(-20,20,2)

power <- rep(NA,length(d))
p.lab <- rep(NA,length(d))

for (j in 1:length(d)){

  mu1 <- 110
  mu2 <- mu1-d[j]  

  reject <- rep(NA,r)

  for (i in 1:r){

    sample1 <- rnorm(n,mu1,sigma)
    sample2 <- rnorm(n,mu2,sigma)

    sample.t <- t.test(sample1,sample2)
    p.val <- sample.t[3]

    reject[i] <- p.val<a 

    power[j] <- sum(reject)/length(reject)
    p.lab[j] <- paste('d=',d[j],sep='')

  }}

d.power <- cbind(d,power)

return(d.power)

p.plot <- plot(d.power[,1], d.power[,2], type="l", xlab=bquote(H[a]), ylab="Power", main="Power Calculations for Two Sample T Test")

print(p.plot)
return(p.plot)

}

何か案は?

4

4 に答える 4

12

これは機能します。提案されているように、リストを使用して複数のオブジェクトを保存できます。

powerc.fun <- function(n,sigma,r){

a <- 0.05
d <- seq(-20,20,2)

power <- rep(NA,length(d))
p.lab <- rep(NA,length(d))

for (j in 1:length(d)){

  mu1 <- 110
  mu2 <- mu1-d[j]  

  reject <- rep(NA,r)

  for (i in 1:r){

    sample1 <- rnorm(n,mu1,sigma)
    sample2 <- rnorm(n,mu2,sigma)

    sample.t <- t.test(sample1,sample2)
    p.val <- sample.t[3]

    reject[i] <- p.val<a 

    power[j] <- sum(reject)/length(reject)
    p.lab[j] <- paste('d=',d[j],sep='')

  }}

d.power <- cbind(d,power)
p.plot <- plot(d.power[,1], d.power[,2], type="l", xlab=bquote(H[a]), ylab="Power", main="Power Calculations for Two Sample T Test")

return(list(p.plot, d.power))

}

# prints the plot and saves d.power values
output <- powerc.fun(100,0.1,10)

# d.power values
output[[2]]

d.powerしかし、おそらく保存してから、グラフをプロットするためにそれを呼び出すことを好むでしょう:

powerc.fun <- function(n,sigma,r){

a <- 0.05
d <- seq(-20,20,2)

power <- rep(NA,length(d))
p.lab <- rep(NA,length(d))

for (j in 1:length(d)){

  mu1 <- 110
  mu2 <- mu1-d[j]  

  reject <- rep(NA,r)

  for (i in 1:r){

    sample1 <- rnorm(n,mu1,sigma)
    sample2 <- rnorm(n,mu2,sigma)

    sample.t <- t.test(sample1,sample2)
    p.val <- sample.t[3]

    reject[i] <- p.val<a 

    power[j] <- sum(reject)/length(reject)
    p.lab[j] <- paste('d=',d[j],sep='')

  }}

d.power <- cbind(d,power)

return(d.power)

}

# saves d.power
output <- powerc.fun(100,0.1,10)

# plot
p.plot <- plot(output[,1], output[,2], type="l", xlab=bquote(H[a]), ylab="Power", main="Power Calculations for Two Sample T Test")
于 2013-11-01T19:18:30.747 に答える
4

「return()」を呼び出すと関数呼び出しが終了するため、それ以降は無視されます

脱いでみる

return (d.power)

または、プロットを定義して印刷した後に移動します。

関連して、1 つの関数から 2 つのオブジェクトを返すことはできません。1 つを選択するか、それらをリストに入れて、リストを返します。

于 2013-11-01T18:55:22.983 に答える