读取函数内的数据

时间:2012-03-11 21:15:15

标签: r function

这是我正在尝试执行的函数,我的数据目录和基目录具有正确的文件路径。

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

关于如何将其作为函数执行的任何想法或想法? 我感谢任何帮助吗?

1 个答案:

答案 0 :(得分:4)

在函数内创建的对象仅在该函数中可见。您需要使用明确的return语句,例如

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

此外,您可能会花些时间阅读scope上的R手册部分。

还有全局赋值运算符<<-,但它的使用常常令人不悦。您应该坚持使用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中的一些内容会广泛涵盖这类内容。