返回列表中的对象,同时将原始数据结构保留在R中

时间:2014-04-10 21:28:22

标签: r list function

在R中,我需要从函数中返回两个对象:

myfunction()
{
 a.data.frame <- read.csv(file = input.file, header = TRUE, sep = ",", dec = ".")
 index.hash <- get_indices_function(colnames(a.data.frame))

 alist <- list("a.data.frame" = a.data.frame, "index.hash" = index.hash)

 return(alist)
}

但是,myfunction返回的对象都变成了list而不是data.frame和hash。

任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:2)

您只能从R函数返回一个对象;这与我所使用的其他语言很相符。但是,您会注意到对象在列表中保留了原始结构 - 因此alist [[1]]和alist [[2]]应该分别是数据框和哈希值,并且将结构化为数据框和散列。一旦您从函数中返回它们,您可以根据需要将它们拆分为唯一对象:)。

答案 1 :(得分:1)

您可以使用structure

return (structure(class = "myclass",
                   list(data = daza.frame,
                        type = anytype,
                        page.content = page.content.as.string.vector,
                        knitr = knitr)))

您可以使用

访问数据
values <- my function(...)
values$data
values$type
values$page.content
values$knitr

等等。

我的包中的一个工作示例:

sju.table.values <- function(tab, digits=2) {
  if (class(tab)!="ftable") tab <- ftable(tab)
  tab.cell <- round(100*prop.table(tab),digits)
  tab.row <- round(100*prop.table(tab,1),digits)
  tab.col <- round(100*prop.table(tab,2),digits)
  tab.expected <- as.table(round(as.array(margin.table(tab,1)) %*% t(as.array(margin.table(tab,2))) / margin.table(tab)))
  # -------------------------------------
  # return results
  # -------------------------------------
  invisible (structure(class = "sjutablevalues",
                       list(cell = tab.cell,
                            row = tab.row,
                            col = tab.col,
                            expected = tab.expected)))
}

tab <- table(sample(1:2, 30, TRUE), sample(1:3, 30, TRUE))
# show expected values
sju.table.values(tab)$expected
# show cell percentages
sju.table.values(tab)$cell