【问题标题】:Reading in data inside a function在函数内部读入数据
【发布时间】:2012-03-11 21:15:14
【问题描述】:

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

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

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

【问题讨论】:

    标签: r function


    【解决方案1】:

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

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

    此外,您可能会从阅读scope 上的 R 手册部分中受益。

    还有全局赋值操作符&lt;&lt;-,但它的使用常常不受欢迎。您可能应该坚持使用 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 中得到了广泛的介绍。

    【讨论】:

    • 我尝试使用该 return 语句,仍然没有运气,我知道它需要修复的一些小问题,最终会解决的。lol
    • @user1250865 不,你完全误解了。 return 语句进入您的函数inside,以便,您知道,return 一个值。尝试阅读一些文档,从 ?return 开始。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多