2013-10-27 18 views
8

Tại sao hàm R của tôi không trả lại hoặc in một ô? Mã dưới đây. Tất cả các mã dường như hoạt động tốt, ngoại trừ cốt truyện. Không có vấn đề gì tôi làm, tôi không thể có được R để tạo ra cốt truyện khi chức năng được gọi. Nhìn xung quanh trực tuyến, tôi không thể tìm thấy bất kỳ lý do tại sao điều này sẽ không hoạt động.Trả lại lô từ hàm 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) 

} 

Bất kỳ ý tưởng nào?

+0

Bạn không cần 'return' nếu bạn đang gọi từ cấp cao nhất (ví dụ, từ bảng điều khiển). Nếu bạn muốn hiển thị cốt truyện, chỉ cần gọi dòng 'plot' mà không lưu trữ nó,' in'-ing nó, hoặc 'return'-ing nó. – Thomas

+0

http://stackoverflow.com/questions/11799317/custom-function-ggplot-and-return-values ​​ –

+0

@Thomas: Nhưng tôi không gọi từ cấp cao nhất, nó được nhúng trong một cuộc gọi hàm. Nếu tôi gọi hàm, nó không có âm mưu gì cả. Ngay cả khi không in/trả lại. –

Trả lời

4

Tác phẩm này. Như đã đề cập, bạn có thể tiết kiệm nhiều hơn một đối tượng bằng cách sử dụng một danh sách:

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]] 

Nhưng có lẽ bạn thích chỉ để tiết kiệm d.power và sau đó gọi nó cho âm mưu đồ thị:

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") 
2

Trong cơ sở R bạn có thể lưu ô vào đĩa. Tôi không tin bạn có thể lưu chúng vào đĩa.
Sử dụng ggplot2 thay

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) 
+0

Bạn sắp xếp có thể với 'recordPlot' ... –

+0

Cảm ơn @MatthewPlourde, tôi không quen với chức năng đó. Nó không giống như bạn "loại có thể" nhưng hoàn toàn có thể, haha;) Đăng đó như là một câu trả lời? –

1

Mã của bạn không hoạt động trên của tôi, nơi biến r là mất tích, nhưng đây là cách tôi gọi một hàm và trả về một đối tượng âm mưu.

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 

enter image description here

3

Một cuộc gọi đến "trở lại()" kết thúc cuộc gọi chức năng, vì vậy bất cứ điều gì sau khi nó bị bỏ qua

Cố gắng loại bỏ

return (d.power) 

hoặc di chuyển nó đến sau khi bạn xác định và in cốt truyện.

Trên ghi chú có liên quan, bạn không thể trả về hai đối tượng từ một hàm. Chọn một hoặc đặt chúng trong danh sách và trả lại danh sách.

Các vấn đề liên quan