2012-03-11 41 views
2

這是一個函數,我試圖執行,我的數據目錄和基目錄有正確的文件路徑。讀取函數中的數據

loadDIH = function(){ 
##---- 
##++++ 
## Target variable: Days in hospital Year 2 
dih.Y2 <- read.csv(file = paste(dataDir, "DaysInHospital_Y2.csv", sep=""), 
     colClasses = c("factor", "integer", "integer"), 
     comment.char = "") 
## Days in hospital Year 3 
dih.Y3 <- read.csv(file = paste(dataDir, "DaysInHospital_Y3.csv", sep=""), 
     colClasses = c("factor", "integer", "integer"), 
     comment.char = "") 

    return(list(dih.Y2,dih.Y3)) 
} 

>return(list(dih.Y2,dih.Y3)) 
Error: object 'dih.Y2' not found 

我的數據目錄和基本目錄有正確的文件路徑,因爲當我使用功能與執行中的代碼,它讀取數據,例如。

dih.Y2 <- read.csv(file = paste(dataDir, "DaysInHospital_Y2.csv", sep=""), 
     colClasses = c("factor", "integer", "integer"), 
     comment.char = "") 

dih.Y3 <- read.csv(file = paste(dataDir, "DaysInHospital_Y3.csv", sep=""), 
     colClasses = c("factor", "integer", "integer"), 
     comment.char = "") 


>dih.Y2 

這將返回dih.Y2

任何思想或如何執行這是一個函數的想法? 我感謝任何幫助?

回答

4

在函數內創建的對象僅在該函數內可見。你要使用顯式聲明return,像

return(list(dih.Y2,dih.Y3)) 

而且,你可能從花一些時間閱讀將R手冊中關於scope受益。

還有全球分配運營商<<-,但它的使用往往是皺眉。您應該堅持R想要使用的方式,並讓函數明確返回您想要的值。

在您的例子,它是這樣的:

loadDIH = function(){ 
##---- 
##++++ 
## Target variable: Days in hospital Year 2 
dih.Y2 <- read.csv(file = paste(dataDir, "DaysInHospital_Y2.csv", sep=""), 
     colClasses = c("factor", "integer", "integer"), 
     comment.char = "") 
## Days in hospital Year 3 
dih.Y3 <- read.csv(file = paste(dataDir, "DaysInHospital_Y3.csv", sep=""), 
     colClasses = c("factor", "integer", "integer"), 
     comment.char = "") 

    return(list(dih.Y2,dih.Y3)) 
} 

然後命令,

foo <- loadDIH(...) 

將導致foo是含dih.Y2dih.Y3列表。

這種東西在初學者的manuals的一些廣泛覆蓋。

+0

我試過使用那個return語句,仍然沒有運氣,我知道它需要修復的東西很小,最終會弄清楚.lol – 2012-03-12 00:20:15

+0

@ user1250865不,你完全誤解了。 'return'語句在你的函數裏面,以便你知道_return_一個值。嘗試閱讀一些文檔,從'?return'開始。 – joran 2012-03-12 00:38:21