在 R 函数中返回多个对象

如何在一个 R 函数中返回多个对象?在 Java 中,我会创建一个 Class,可能是 Person,它有一些私有变量并封装了,可能是 heightage等等。

但是在 R 中,我需要传递数据组。例如,如何使一个 R 函数同时返回一个字符列表和一个整数?

282951 次浏览

与许多其他语言不同,R 函数严格意义上不返回多个对象。处理这个问题的最常用方法是返回一个 list对象。因此,如果你的函数中有一个整数 foo和一个字符串 bar的向量,你可以创建一个包含以下项目的列表:

foo <- 12
bar <- c("a", "b", "e")
newList <- list("integer" = foo, "names" = bar)

然后 return这个名单。

在调用函数之后,可以使用 newList$integernewList$names访问其中的每个函数。

其他对象类型可能在不同的目的下工作得更好,但是 list对象是一个很好的入门方法。

你要找的是这样的东西吗?

x1 = function(x){
mu = mean(x)
l1 = list(s1=table(x),std=sd(x))
return(list(l1,mu))
}


library(Ecdat)
data(Fair)
x1(Fair$age)

类似地,在 Java 中,您可以在 R 中创建一个 S4类来封装您的信息:

setClass(Class="Person",
representation(
height="numeric",
age="numeric"
)
)

然后你的函数可以返回这个类的一个实例:

myFunction = function(age=28, height=176){
return(new("Person",
age=age,
height=height))
}

你可以查阅你的资料:

aPerson = myFunction()


aPerson@age
aPerson@height

您可以使用 for()assign()来创建许多对象。 参见 assign()的例子:

for(i in 1:6) { #-- Create objects  'r.1', 'r.2', ... 'r.6' --
nam <- paste("r", i, sep = ".")
assign(nam, 1:i)

看看这些新东西

ls(pattern = "^r..$")

也可以使用超级赋值。

而不是“ <-”类型“ < <-”。该函数将递归和重复地在更高的一个函数级别上搜索该名称的对象。如果找不到,它将在全球层面上创建一个。

处理这个问题的一种方法是将信息作为属性放在主属性上。我必须强调,我真的认为这是适当的事情,只有当这两件信息是相关的,这样一个有信息关于另一个。

例如,我有时候会隐藏“关键变量”的名称,或者通过将变量名列表作为属性存储在数据框架中而被显著修改的变量:

attr(my.DF, 'Modified.Variables') <- DVs.For.Analysis$Names.of.Modified.Vars
return(my.DF)

这允许我用数据框架本身存储变量名列表。