在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。
任何帮助将不胜感激。
答案 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