2017-02-05 32 views
0

Я очень новичок в R, и у меня есть некоторые проблемы при выполнении цикла, используя seq() и список. У меня есть поиск по QnA в SO, но я должен найти ту же проблему, что и это. Прошу прощения, если на этом есть дубликат QnA. Я знаю основную информацию о том, как генерировать последовательность чисел и генерировать с помощью списка, однако мне интересно, можем ли мы сгенерировать список последовательностей для каждого цикла.Можно ли создать список seq() для цикла в r?

это пример моего кода

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: (сл (50, 200, 50)): численное выражение имеет 6 элементов: только первая используется

для (я в 1: список (Seq (50,200,50)))

Ошибка в 1: лист (сл (50, 200, 50)): NA/NaN аргумент

могу ли я узнать, является ли такие комбинации петли можно выполнить? Не могли бы вы направить меня на это? Большое спасибо.

+0

Я пробовал ваше предложение, однако оно выходит со значениями из [1] .. [300]. Я действительно хотел, чтобы он выполнил цикл моделирования из [1] .. [50], затем выполнил следующий цикл [1] .. [100] что соответствует seq (50 200, 50). Означает ли это, что мне нужно сделать это 1 к 1? – 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' является правом« списка ». вы можете это сделать или просто создать нулевой список, используя 'l1 = list()' –

+1

спасибо за ваше объяснение. Я тестировал другую формулу, и она работает. Еще раз за вашу любезную помощь – yannia