2017-02-05 22 views
0

我對R很新,我在使用seq()和列表執行循環時遇到了一些問題。我在SO搜索QnA,但我必須找到與此相同的問題。我對此表示歉意,如果有重複的QnA。 我知道如何生成序列的數字和生成使用列表的基本知識,但我想知道我們是否可以生成每個循環的序列列表。是否有可能爲r中的循環生成一個seq()的列表?

這是我的代碼

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個元件:僅用於第一

爲(I在1:名單(SEQ(50,200,50)))

錯誤1:名單(SEQ(50,200,50)):NA/NaN的參數

我可以知道,無論這樣的環組合可以執行?你能指導我嗎?非常感謝你。

+0

我試過了你的建議,但是它出來的值是[1] .. [300]。我真的希望它從[1] .. [50]執行模擬循環,然後執行下一個循環[1] .. [100]這是根據seq(50,200,50)。這是否意味着我需要一個一個地完成? – yannia

回答

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]) 
} 

在您想矩陣列表的列表(J)(K)的第二個問題:請做筆記帽子<<-從來就不是一個很好的做法,但現在這是我可以想出的!

注:要了解什麼是真正發生的事情,進入debug模式:即定義func後,也通過debug(func)然後將進入一步一步執行。

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) 
+1

是的,我認爲這是解決方案,因爲我需要它運行4次以在函數內部循環,並且您的解決方案可以工作。我瞭解seq_along,但是你可以關心第二行代碼嗎? l1 < - vector(length = length(J),mode =「list」)是否強制性地寫下來解釋我們要使用的函數?先謝謝 – yannia

+0

@yannia你需要告訴工具'l1'是一個'list'的權利。你可以這樣做,或者只是使用'l1 = list()' –

+1

創建一個空列表感謝你的解釋。我已經測試過其他配方,它的工作原理。再次感謝您的協助 – yannia

相關問題