如何在R函数中返回多个对象?在Java中,我会创建一个类,也许Person
有一些私有变量并封装,可能是height
,age
等。
但在R中,我需要传递数据组。例如,如何使R函数返回字符列表和整数?
答案 0 :(得分:183)
与许多其他语言不同,R函数不会严格意义上返回多个对象。处理此问题的最常用方法是返回list
对象。因此,如果函数中有一个整数foo
和一个字符串bar
的向量,您可以创建一个组合这些项的列表:
foo <- 12
bar <- c("a", "b", "e")
newList <- list("integer" = foo, "names" = bar)
然后return
此列表。
调用您的函数后,您可以使用newList$integer
或newList$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)
这允许我用数据框本身存储变量名列表。