我是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参数
我可以知道,这样的循环组合是否可以执行?你能指导我吗?非常感谢你。
答案 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)