2013-10-09 25 views
-1

我在R上的下面的代码:R,函数返回文件和相同的文件的摘要

getmonitor<- function(id,directory,summarize=FALSE) { 
    a<- "C:/Users/UNI/Documents/Coursera/archivosR/" 

    b<- paste(a,directory,"/",sprintf("%03d",as.numeric(id)),".csv",sep="") 

    c<- read.csv(b) 

    if(summarize) { 
     print(summary(c)) 
    }else { 
     return(c) 
    } 
} 

我尝试做的是,如果summarize =FALSE,该功能仅返回文件和在我的功能中工作正常。但是,如果summarize=TRUE函数返回的摘要是正确的,但是如果我为head()写一个值,它等于我在TRUE模式下的函数,那么结果就是摘要,我希望head的结果是文件。

+0

你为什么不代码表明,你正在运行的,你还指望什么,你得到什么。 – nograpes

+0

是否可以像在print(summary(c))'后面添加另一个'return(c)'一样简单? – JackeJR

+0

例如,如果我在我的函数中设置了true,并且运行head(a),则结果是摘要,但我希望该文件作为结果。 – CreamStat

回答

0

在您的代码中,当您传递TRUE进行汇总时,它绕过了返回(c)语句,因此R决定返回摘要。既然你想为所有情况返回数据帧c,你只需要把它放在你的if/else结构之外。

修改你的if/else结构:

getmonitor<- function(id,directory,summarize=FALSE) { 
    a<- "C:/Users/UNI/Documents/Coursera/archivosR/" 

    b<- paste(a,directory,"/",sprintf("%03d",as.numeric(id)),".csv",sep="") 

    c<- read.csv(b) 

    if(summarize) 
     print(summary(c)) 

    return(c) 
} 

我得到所需的输出:

> data <- getmonitor(1,"specdata",TRUE) 
     Date   sulfate   nitrate    ID 
2003-01-01: 1 Min. : 0.613 Min. :0.1180 Min. :1 
2003-01-02: 1 1st Qu.: 2.210 1st Qu.:0.2835 1st Qu.:1 
2003-01-03: 1 Median : 2.870 Median :0.4530 Median :1 
2003-01-04: 1 Mean : 3.881 Mean :0.5499 Mean :1 
2003-01-05: 1 3rd Qu.: 4.730 3rd Qu.:0.6635 3rd Qu.:1 
2003-01-06: 1 Max. :19.100 Max. :1.8300 Max. :1 
(Other) :1455 NA's :1344  NA's :1339     
> head(data) 
     Date sulfate nitrate ID 
1 2003-01-01  NA  NA 1 
2 2003-01-02  NA  NA 1 
3 2003-01-03  NA  NA 1 
4 2003-01-04  NA  NA 1 
5 2003-01-05  NA  NA 1 
6 2003-01-06  NA  NA 1 
+0

这很容易,非常感谢秘鲁,我将在Coursera使用它的过程中使用它! – CreamStat

相关问题