我是R的新手,有这个非常基本的疑问:我们可以有任何其他方法来创建一个对象,它是多个对象的集合,比如矩阵,数据框架和向量?据我所知,它只能使用列表对象完成。一个R对象的集合
说我有矩阵X,
x <- matrix(1:12,nrow=4)
y <- data.frame(x)
z <- c("a", "b", "c")
生成列表my_list的,
my_list <- list(x, y, z)
但如果有一些其他的方式比一个上面,我想知道。
我是R的新手,有这个非常基本的疑问:我们可以有任何其他方法来创建一个对象,它是多个对象的集合,比如矩阵,数据框架和向量?据我所知,它只能使用列表对象完成。一个R对象的集合
说我有矩阵X,
x <- matrix(1:12,nrow=4)
y <- data.frame(x)
z <- c("a", "b", "c")
生成列表my_list的,
my_list <- list(x, y, z)
但如果有一些其他的方式比一个上面,我想知道。
这里是返回数据
列表(的完整性)的一些其他方法
group1 = list(x, y, z)
环境
group2 = new.env()
group2$x = x
group2$y = y
group2$z = z
ls(envir=group2)
S4对象
setClass("group3",
representation(
x = "matrix",
y = "data.frame",
z = "character"
)
)
s4 = new("group3", x=x, y=y, z=z)
参考对象
group4 = setRefClass("group4",
fields = list(x = "matrix",
y = "data.frame",
z = "character"))
group4$new(x=x, y=y, z=z)
函数闭
group5 = function(x, y, z) function() return(list(x, y, z))
g5 = group5(x, y, y)
g5()
洛杉矶示例(函数闭包)试图强调有很多方法来返回数据,但您应该仔细考虑要使用返回的对象执行什么操作。例如,使用S4对象返回您的示例数据集是矫枉过正的。但生物导体使用S4对象(与环境相结合)将来自微阵列实验的复杂数据组合在一起。
我不确定“函数闭包”的例子有多好,因为它返回一个“列表” - 我们又回到了(正方形)。这个例子并没有说明它是*闭包本身*,它首先保存了对象,我们不需要将它们作为列表返回。 –
@KonradRudolph我同意,函数闭包不是一个很好的例子,但它意在表明你应该仔细考虑你想要对数据做什么。顺便说一句,g5是一个(无用的?)'函数'而不是'list' – csgillespie
我意识到这一点 - 但它的价值是一个列表,这是一个潜在的混淆部分。不幸的是,更有意义的例子是必要的更复杂。 –
您也可以使用[环境](http://adv-r.had.co.nz/Environments.html)。 – Thomas