R for循环中的错误

时间:2015-10-02 15:54:17

标签: r loops

我想制作几个数字列表,然后将它们连接起来,即

列表1 = 1,1,1,1

列表2 = 2,2,2,2

列表3 = 3,3,3,3

最终名单= 1,1,1,2,2,2,2,3,3,3,3

我尝试了以下内容来创建列表1到3

ageseq <- c(1,2,3)
n <- 3
n2 <- 4

for (i in 1:n){
  for (j in 1:n){
    age[i] <- c(rep(ageseq[j],n2))
  }  
}

产生以下错误,

In age[i] <- c(rep(ageseq[j], n2)) :
  number of items to replace is not a multiple of replacement length

因为age1,age2和age3不存在。

我的代码中缺少什么?实际上,我需要连接70多个数字列表。

2 个答案:

答案 0 :(得分:3)

所以问题是你要用长度为4的元素(age[i])替换长度为1的元素(rep(ageseq[j], n2))。你没有连接列表,你试图用数字列表替换数字i元素,这会导致警告。

如果您想按照指定的方式进行操作,则需要使用循环:

ageseq <- c(1,2,3)
n <- 3
n2 <- 4
age <- c()

for (j in 1:n){
  age <- c(age, rep(ageseq[j],n2))
}

将根据需要将单独的列表连接成一个。有人提出的另一个选择是使用:age <- rep(1:3,each=4)。要创建单独的列表,您可以使用循环:

ageseq <- c(1,2,3)
n <- 3
n2 <- 4
age_list <- list()

for (j in 1:n){
  age_list[[j]] <- rep(ageseq[j],n2)
}

然后age_list[[1]]将是一个列表,age_list[[2]]将是两个等的列表。

答案 1 :(得分:0)

您可以尝试:

unlist(lapply(1:3, rep, 4))