在R函数中返回多个对象[重复]
Posted
技术标签:
【中文标题】在R函数中返回多个对象[重复]【英文标题】:Returning multiple objects in an R function [duplicate] 【发布时间】:2012-02-14 16:55:13 【问题描述】:如何在 R 函数中返回多个对象?在 Java 中,我会创建一个类,可能是 Person
,它有一些私有变量并封装,可能是 height
、age
等。
但在 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$integer
或newList$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@age
或aPerson@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重复行