返回R函数中的多个对象

时间:2012-01-20 02:30:17

标签: r function

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

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

6 个答案:

答案 0 :(得分:183)

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

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

然后return此列表。

调用您的函数后,您可以使用newList$integernewList$names访问其中的每一项。

其他对象类型可能更适合各种用途,但list对象是一种很好的入门方式。

答案 1 :(得分:35)

类似地,在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

答案 2 :(得分:18)

这些是你想要的东西吗?

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)

答案 3 :(得分:4)

您也可以使用超级作业。

而不是&#34;&lt; - &#34;输入&#34;&lt;&lt; - &#34;。该函数将递归地重复搜索该名称对象的一个​​更高级别的功能级别。如果它找不到,它将在全球范围内创建一个。

答案 4 :(得分:2)

您可以将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..$")

答案 5 :(得分:1)

处理此问题的一种方法是将信息作为属性放在主要信息上。我必须强调,我真的认为只有当两条信息相关时才能做到这一点,这样才能获得另一条信息。

例如,我有时通过在数据框中存储变量名称列表作为属性来隐藏“关键变量”或已经显着修改的变量的名称:

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

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