如何返回带有R中字段的对象?

时间:2015-03-29 07:59:46

标签: r

我有一个如下所示的功能。我想读取CSV文件,然后将数据拆分为两组。

loadData <- function(f) {
 rdata <- read.csv(f, header=TRUE);
 rdata$class <- factor(rdata$class);
 rdata.a <- subset(rdata, class == 0);
 rdata.b <- subset(rdata, class == 1);
 return(rdata);
}
然后我按照以下方式调用该函数。

rdata <- loadData("/path/to/data.csv");

但是,当我尝试引用rdata.a(或rdata.b)时,我收到以下消息。

  

错误:找不到对象'rdata.a'

但是,我仍然可以“正常”引用返回的对象

  

类(radata)

     
    

[1]“data.frame”

  

如何修改函数以便还返回字段(a和b)?

请注意,如果此代码不在函数内部,那么一切都按预期工作(我可以引用rdata.a和rdata.b)。

1 个答案:

答案 0 :(得分:2)

对象rdatardata.brdata.b是两个不相关的对象。点在R中没有特殊含义,例如在Java或Python中。要返回两个子集,需要将它们放在一个列表中。此外,不需要在行尾添加分号:

loadData <- function(f) {
  rdata <- read.csv(f, header=TRUE)
  rdata$class <- factor(rdata$class)
  rdata.a <- subset(rdata, class == 0)
  rdata.b <- subset(rdata, class == 1)
  return(list(rdata.a, rdata.b))
}

rdata <- loadData("/path/to/data.csv")

然后,您可以使用rdata[[1]]rdata[[2]]访问它们。