在R函数中返回多个对象[重复]

Posted

技术标签:

【中文标题】在R函数中返回多个对象[重复]【英文标题】:Returning multiple objects in an R function [duplicate] 【发布时间】:2012-02-14 16:55:13 【问题描述】:

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

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

【问题讨论】:

我认为这对于来自其他语言的人来说可能并不直观,但列表是做到这一点的方式。所以你会有一个包含两个元素的列表:一个列表和一个整数。 这个问题和this one非常相似。那里有一些不同的答案。 比起the other question,我更喜欢这里的问题标题问题正文答案作为副本。 【参考方案1】:

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

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

然后return 这个列表。

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

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

【讨论】:

要立即分配返回列表中的元素,请查看:***.com/a/15140507【参考方案2】:

您正在寻找这些方面的东西吗?

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】:

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

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

那么你的函数可以返回这个类的一个实例:

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

您可以访问您的信息:

aPerson = myFunction()

aPerson@age
aPerson@height

【讨论】:

只是在这里学习...当您显然已经用myFunction = function(age=28, height=176)... 定义了年龄和身高时,返回aPerson@ageaPerson@height 之类的内容什么时候有用。我只是不明白(即,为什么这是有用的)。因此,您已经实例化了您的类,然后您想了解有关该实例的详细信息。但是既然你已经实例化了这个类,你难道不知道这些细节吗? @warship 这只是一个解释如何返回对象的虚拟示例。我构建对象的方式在这里并不重要。我们还可以让 myFunction 根据其他参数计算年龄和身高。 好的,非常感谢。我只是想了解更多有关在 R(S3、S4 等)中进行 OOP 以及何时有用的知识。【参考方案4】:

您可以使用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】:

你也可以使用超级赋值。

而不是“

【讨论】:

【参考方案6】:

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

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

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

这使我可以将变量名称列表与数据框本身一起存储。

【讨论】:

以上是关于在R函数中返回多个对象[重复]的主要内容,如果未能解决你的问题,请参考以下文章

R语言unique函数计算数据对象(vectordataframe)的unique独特值:unique函数从vector向量dataframe中删除重复项删除dataframe重复行

获取在 R 的全局环境中加载的函数列表 [重复]

R:as.numeric函数没有从data.frame返回正确的# [重复]

一个R函数,它沿列查找多个对象

单个数字中的多个数字[重复]

从函数返回多个值[重复]