如何使用"未知名称"?在R中创建对象

时间:2015-02-11 09:33:19

标签: r object

我正在尝试在R中创建(矢量)对象。因此,我希望实现我没有指定先验对象的名称。例如,如果我有一个长度为3的列表,我想创建对象p1p3,如果我有一个长度为10的列表,则对象p1到{{1}必须创建。长度应该是任意的,而不是先验确定。

感谢您的帮助!

3 个答案:

答案 0 :(得分:2)

我想这样做的正确方法是考虑列表p = list(),然后您可以使用p[[i]]尽可能大的i,而无需指定任何长度。

然后,当您的列表填满后,您可以重命名:names(p) = paste0("p",c(1:length(p)))

最后,如果您希望直接访问所有pi个变量,请添加attach(p)

答案 1 :(得分:1)

这是一种黑客,但你可以做以下

short_list <- list(rnorm(10),rnorm(20),1:3)
long_list <- c(short_list,short_list )

paste0("p",seq_along(short_list))

mapply(assign, paste0("p",seq_along(short_list)), short_list, MoreArgs = list(envir = .GlobalEnv))

结果:

> p3
[1] 1 2 3

您可以使用long_list

执行相同的操作

我没有看到你需要的统计模型。最好直接开始使用列表,例如short_list data.frame

PS 如果你只想将它用于glm,你可能想要在 R 中学习formula

glm(y~., data=your_data)将数据框中未命名为 y 的所有列作为回归量。也许这有帮助。

答案 2 :(得分:0)

assign(也许还有attach)通常表明您还没有达到代码的“Rish”版本。

考虑到你需要这个来进行建模:如果你的$ p_1 \ cdot p_n $属于同一类型,你可以将它们放入一个矩阵中(在data.frame的一列内;对于建模它们无论如何需要长度相同):

df$matrix <- p.matrix

如果您直接创建data.frame,则需要确保矩阵未展开到data.frame列:

df <- data.frame (matrix = I (matrix), ...)

然后glm (y ~ matrix, ...)将有效。

有关此技术的示例,请参阅例如包plshyperSpecpls paper in the Journal of Statistical Software