首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用R中的循环创建变量A1、A2、.、A100?

如何使用R中的循环创建变量A1、A2、.、A100?
EN

Stack Overflow用户
提问于 2019-04-17 03:59:55
回答 3查看 835关注 0票数 1

我正在尝试创建1000个变量,我想用索引号命名这些变量。我不知道如何创建这些新变量。

代码语言:javascript
复制
for(i in 1:1000) {
  Ui <- rnorm(200,0,1)
}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-04-17 04:16:14

这是人们想要做的一种常见的事情,特别是当他们来自其他编程语言时。然而,有更好的方法来完成同样的事情,并且您不应该遵循使用assign的建议;这是一个糟糕的建议,以后您可能会后悔。

我们在R中这样做的方法是使用列表,特别是命名列表:

代码语言:javascript
复制
x <- replicate(1000,rnorm(200,0,1),simplify = FALSE)
x <- setNames(x,paste0("A",seq_along(x)))

现在,x是长度为1000的命名列表,每个元素都是正常(0,1)分布中长度为200的向量。

您可以根据需要通过x[[1]]x[["A1"]]引用每一个。此外,由于它们都在同一个对象中,所以可以使用像lapply这样的工具轻松地作为一个组对它们进行操作。

当您发现自己想要创建一个具有相似名称的对象序列时,这应该是一个信号,表明您应该使用一个列表。

票数 4
EN

Stack Overflow用户

发布于 2019-04-17 04:17:22

没有必要用这么多变量来凌乱您的环境,请尝试将它们存储在一个命名列表中。

代码语言:javascript
复制
l1 <- setNames(lapply(1:5, function(x) rnorm(5)), paste0("A", 1:5))
l1

#$A1
#[1]  0.4951453 -1.4278665  0.5680115  0.3537730 -0.7757363

#$A2
#[1] -0.11096037  0.05958700  0.02578168  1.00591996  0.54852030

#$A3
#[1]  0.1058318  0.6988443 -0.8213525 -0.1072289  0.8757669

#$A4
#[1] -0.6629634  0.8321713 -0.3073465 -0.2645550 -1.0064132

#$A5
#[1]  2.2191246  0.2054360 -0.1768357  1.6875302 -1.1495807

现在,您可以访问单个列表元素,如

代码语言:javascript
复制
l1[["A1"]]
#[1] 0.4951453 -1.4278665  0.5680115  0.3537730 -0.7757363

此外,另一种方法是将所有数字一起生成,然后将它们split为list。

代码语言:javascript
复制
groups = 5
each = 5

setNames(split(rnorm(groups * each), rep(seq_len(groups), each = each)), 
         paste0("A", seq_len(groups)))
票数 3
EN

Stack Overflow用户

发布于 2019-04-17 05:22:15

我同意其他人的意见,这不是一个好主意。不管怎样,要回答你的问题,你应该怎么做

代码语言:javascript
复制
k <- 1000 # number of variables
n <- 200 # sample size of each variable
for(i in 1:k){
assign(paste0("variable", i), rnorm(n, 0, 1))}
variable1
-0.012947062  0.728284959 -1.627796366  0.003471491 ...

不过,就我个人而言,我更倾向于另一种解决办法。到目前为止,这两个答案都建议使用列表。我发现lsts非常麻烦,特别是如果您对R还不熟悉的话,所以我建议创建一个矩阵,其中每一列都包含一个变量

代码语言:javascript
复制
# creates a matrix
m <- matrix(rep(NA, n*k), ncol= k)
# generates rnorm() in each column
for(i in 1:k){
m[ , i] <- rnorm(n, 0, 1)
}

# now you can name the columns
colnames(m) <- paste0("variable", 1:k)
m
        variable1   variable2    ...
 [1,]  0.30950749 -2.07388046
 [2,] -1.13232330 -0.55511476
  ...   
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55719665

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档