是否可以在r中生成一个seq()for循环列表?

时间:2017-02-05 02:34:12

标签: r loops seq

我是R的新手,我在使用seq()和list执行循环时遇到了一些问题。我在SO中搜索QnA,但我必须找到与此相同的问题。如果此处有重复的QnA,我道歉。 我知道如何生成数字序列和使用列表生成的基本知识,但是我想知道我们是否可以为每个循环生成序列列表。

这是我的代码

的一个例子
J <- seq(50,200,50) # (I actually wanted to use 1: J to generate a sequence of each combinations . i.e: 1:50, 1:100 etc)

K <- seq(10,100,10) #(same as the above)

set.seed(1234)

for (i in J) {

    for (j in K){
        f <- rnorm(i + 1) # the f value I would like it to be generate in terms of list, since the j have 4 sequence value, if possible, could it adhere to that?

    }

}

我尝试使用序列和列表功能,但我不断收到任何消息:

if print(i)

输出

[1]1

.
.
.

[1]50

警告讯息:

  

1 :( seq(50,200,50)):    数值表达式有6个元素:只使用第一个

     

for(i in 1:list(seq(50,200,50)))

     

1:列表中的错误(seq(50,200,50)):NA / NaN参数

我可以知道,这样的循环组合是否可以执行?你能指导我吗?非常感谢你。

1 个答案:

答案 0 :(得分:0)

还不确定你在问什么,但这是你在寻找什么?很难将此作为评论发布

J <- seq(50,200,50)
l1 <- vector(length = length(J), mode = "list")
for (i in seq_along(J)){    # you know of seq_along() right?
  l1[[i]] = rnorm(J[i])
}

对于你想要列表(K)矩阵列表(J)的第二个问题:请注意帽子<<-从来都不是一个好习惯,但是现在这就是我想出来的!

注意:要了解实际发生的情况,请进入debug模式:即在定义func之后,也传递debug(func),然后逐步执行。{1}}。

l1 <- vector(length = length(J), mode = "list")
l2 <- vector(length = length(K), mode = "list")

func <- function(x){
  l1[[x]] <- l2
  func1 <- function(y) {
    l1[[x]][[y]] <<- matrix(rnorm(J[x]*K[y]), 
                          ncol = J[x], 
                          nrow = K[y])
  }
  lapply(seq_along(l1[[x]]),func1)
}

lapply(seq_along(l1), func)