2013-10-27 12 views
8

मेरा आर फ़ंक्शन वापस क्यों नहीं आएगा या साजिश मुद्रित नहीं करेगा? कोड नीचे है। साजिश को छोड़कर, सभी कोड ठीक काम करने लगते हैं। कोई फर्क नहीं पड़ता कि मैं क्या करता हूं, जब फंक्शन कहलाता है तो मैं प्लॉट बनाने के लिए आर नहीं प्राप्त कर सकता। ऑनलाइन चारों ओर देखकर, मुझे कोई कारण नहीं मिल रहा है कि यह क्यों काम नहीं करेगा।आर फ़ंक्शन से वापसी साजिश

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

आप की जरूरत नहीं है के रूप में सुझाव दिया, आप एक सूची का उपयोग करके एक से अधिक वस्तु बचा सकता है यदि आप शीर्ष स्तर से कॉल कर रहे हैं (यानी, कंसोल से) 'वापसी'। आप साजिश को प्रदर्शित करना चाहते हैं, तो बस भंडारण के बिना 'plot' लाइन फोन,' print'-इंग यह, या 'यह return'-इंग। – Thomas

+0

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

+0

@Thomas: लेकिन मैं शीर्ष स्तर से फोन नहीं कर रहा हूँ, यह एक समारोह कॉल के भीतर एम्बेडेड है। अगर मैं समारोह को बुलाता हूं, तो यह बिल्कुल साजिश नहीं करता है। प्रिंट/वापसी के बिना भी। –

उत्तर

4

यह काम करता है। 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) 
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]] 

लेकिन शायद तुम सिर्फ पसंद करते हैं:

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

आधार 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) 
+0

आप एक तरह से कर सकते हैं 'recordPlot' ... –

+0

धन्यवाद @MatthewPlourde साथ, मुझे लगता है कि समारोह के साथ अपरिचित था। ऐसा लगता है कि आप "तरह का कर सकते हैं" लेकिन बिल्कुल कर सकते हैं, हाहा;) इसे उत्तर के रूप में पोस्ट करें? –

1

आपका कोड मेरी जहां चर आर याद आ रही है पर काम नहीं करता है, लेकिन यहाँ है मैं कैसे एक समारोह फोन और एक साजिश वस्तु लौटने।

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

एक कॉल करने के लिए "वापसी()" समारोह कॉल समाप्त होता है, तो यह बाद कुछ

नजरअंदाज कर दिया है हो रही कोशिश

return (d.power) 

से छुटकारा या ले जाकर साजिश को परिभाषित और मुद्रित करने के बाद।

संबंधित नोट पर, आप एक कार्य से दो वस्तुओं को वापस नहीं कर सकते हैं। एक को चुनें या उन्हें एक सूची में रखें और सूची वापस करें।

संबंधित मुद्दे