为什么我的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)
}
有什么想法吗?
答案 0 :(得分:7)
这很有效。如建议的那样,您可以使用列表保存多个对象:
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")
答案 1 :(得分:4)
对“return()”的调用结束了函数调用,因此忽略后的任何内容
尝试摆脱
return (d.power)
或在定义和打印图表后将其移动到。
在相关说明中,您无法从一个函数返回两个对象。选择一个或将它们放入列表中并返回列表。
答案 2 :(得分:2)
在基础R
中,您可以将图表保存到磁盘。我不相信你可以把它们保存到磁盘上
请改用ggplot2
library(ggplot2)
.
.
.
p.plot <- qplot(as.data.frame(d.power), aes(x=d, y=power)) +
geom_line() +
labs(x=bquote(H[a]), y="Power", title="Power Calculations for Two Sample T Test")
# double check the xlab, it might be incorrect
return(p.plot)
答案 3 :(得分:2)
你的代码不适用于缺少变量r的地方,但这是我如何调用函数并返回绘图对象。
library(ggplot2)
data(mtcars)
my.plot <- function() {
result <- ggplot(data=mtcars, aes(x=wt, y=mpg)) + geom_point()
# you can forget the return below because R will take the last expression which is result as return value
# return(result)
}
a <- my.plot()
> class(a)
[1] "gg" "ggplot"
> a