在R函数中返回多个对象

在R函数中返回多个对象,r,function,R,Function,如何在R函数中返回多个对象?在Java中,我会创建一个类,可能是Person,它有一些私有变量,并封装了,height,age,等等 但在R中,我需要传递数据组。例如,如何使R函数同时返回字符列表和整数?与许多其他语言不同,R函数在严格意义上不返回多个对象。处理此问题的最常用方法是返回列表对象。因此,如果在函数中有一个整数foo和一个字符串向量bar,则可以创建一个组合以下项目的列表: foo <- 12 bar <- c("a", "b", "e") newList <- l

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


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

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

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

foo这就是你想要的东西吗

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"
          )
)
aPerson = myFunction()

aPerson@age
aPerson@height
然后,您的函数可以返回此类的实例:

myFunction = function(age=28, height=176){
  return(new("Person",
          age=age,
          height=height))
}
您可以访问您的信息:

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

aPerson@age
aPerson@height
您可以使用
for()
assign()
来创建许多对象。 请参见
assign()
中的示例:


也可以使用超级赋值


处理这个问题的一种方法是将信息作为一个属性放在主属性上,而不是“。我必须强调,我真的认为,只有当两条信息相互关联,其中一条信息包含另一条信息时,才应该这样做

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

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

attr(my.DF,'Modified.Variables')我认为,对于其他语言的人来说,这可能并不直观,但列表是实现这一点的方法。因此,你会有一个包含两个元素的列表:一个列表和一个整数。这个问题非常类似。那里有一些不同的答案。我更喜欢问题标题、问题正文文本和答案,而不是这个要立即分配返回列表中的元素,请查看:Just learning here…何时返回类似
aPerson@age
aPerson@height
当您显然已经用
myFunction=function(年龄=28,身高=176)定义了年龄和身高时{…
。我就是不明白(例如,为什么这很有用).所以你已经实例化了你的类,然后你想知道实例的细节。但是既然你已经实例化了类,你还不知道这些细节吗?@carvor这只是一个虚拟的例子来解释如何返回一个对象。我构建对象的方式在这里并不重要。我们还可以让myFunction计算年龄和he从其他参数中可以看出。好的,非常感谢。我只是想学习更多关于在R(S3、S4等)中执行OOP的知识,以及它什么时候有用。