2016-05-16 5 views
0

У меня есть несколько векторов D я, где я = 1, 2, ..., 40. В настоящее время в для -loop, я хочу сделать некоторые операции на этих. Следующий псевдокод суммирует мою цель.Назначают вектор динамически в R

for i in 1:40 
    D = Di # How to do this? 
    # ... do some operations on D # 

Edit: Обратите внимание, что каждый Di отдельный вектор.

+0

Извините, если это звучит глупо, но если D представляет собой фрейм данных с я столбцами, что-то вроде 'D = D [, i] 'должен работать – zyurnaidi

+0

К сожалению, это не так. Каждый Di является отдельным вектором. –

+1

Что вы подразумеваете под несколькими векторами? Вы имеете в виду, что у вас есть 40 объектов R, называемых D1, D2, D3 и т. Д.? Если это так, вы можете использовать 'get (paste0 (" D ", i))' для цикла. –

ответ

3

помещает их все в список, к каждому объекту списка (вектору) можно получить доступ с помощью индексной нотации.

MyVectors = list(D1 = c(1:10), 
       D2 = c(11:20)) 

> MyVectors[[1]] 
[1] 1 2 3 4 5 6 7 8 9 10 
> MyVectors[[2]] 
[1] 11 12 13 14 15 16 17 18 19 20 

поэтому вы можете получить доступ к ним, как, например:

for(i in 1:2){ 
     MyVectors[[i]] = MyVectors[[i]] + 2 
} 
2

Funnily, I just answered a similar question about 45 minutes ago. Я придерживаюсь той философии, которую я описал в этом ответе по этому вопросу. Но поскольку у вас 40 свободных объектов, а не только 2, подход «сепаратизма» действительно не имеет смысла. Вы должны использовать подход «систематичности» следующим образом:

Ds <- list(
    c(...), ## 1st vector 
    c(...), ## 2nd vector 
    ... 
    c(...) ## 40th vector 
); 

for (i in seq_along(Ds)) { 
    ## do some operations on Ds[[i]] 
}; 
0

Смешно, я ответил на другой вопрос час назад. Таким же образом, мы можем разместить vectors в list, а затем выполнить операцию с в каждом элементе списка

MyVectors = list(D1 = c(1:10), 
      D2 = c(11:20)) 
lapply(MyVectors, function(x) x +2)