2016-03-23 4 views
0

Я ищу, чтобы создать список векторов, которым я хочу присвоить определенное значение. Я знаю, что смогу сделать что-то вродеСоздание нескольких переменных, назначение атрибутов, назначение значений в цикле for

var_list=c(V1, V2...etc) 

Затем используйте var_list [i] в ​​цикле for. Чтобы сделать это, мне сначала нужно создать список, который длинный. Я знаю, что могу сделать что-то вроде

for(i in 1:n){ 
    assign(paste("Mx", i, sep = ""), i) 
} 

это будет создает мое имя переменной. Проблема в том, как мне управлять ими? Я хотел бы способ сделать что-то вроде этого:

for(i in 1:n){ 
    attributes(assign(paste("Mx", i, sep = ""), i))<-list(dim=1:n) 
    "here I would like to append the newly created variable (Mx"i") into a list so I could manage the whole thing later on". 
} 

Так что я мог бы сделать:

for (k in 1:n){ 
for (j in 1:m) 
new_list[[k]][j]<-other_list[[k]][(j-1)*3+1] 
} 

Any1 обзавелся идею? Основная проблема заключается в том, что у меня есть этот длинный список векторов (который представлен здесь «other_list»). Каждый вектор в этом списке имеет 36 записей. Я хочу разделить каждый из этих векторов на три разных вектора (мне нужно указать конкретное значение вектора из «other_list». Я хочу применить к конкретному значению вектора «new_list». Спасибо!

+1

'assign' - это не функция, которую должны использовать новички. Он обычно предлагает только очевидное решение, которое делает последующие шаги только более сложными для вас. – Roland

ответ

1

Только предварительно выделить список и назначить его название:

n <- 10 
#pre-allocate list 
mylist <- vector(n, mode = "list") 
#assign names 
names(mylist) <- paste0("Mx", seq_len(n)) 

#fill the list 
for(i in 1:n){ 
mylist[[i]] <- i 
} 

mylist[1:3] 
#$Mx1 
#[1] 1 
# 
#$Mx2 
#[1] 2 
# 
#$Mx3 
#[1] 3 

PS:. Вы должны научиться использовать lapply для таких задач

setNames(lapply(seq_len(n), identity), paste0("Mx", seq_len(n))) 

и это оптимальное решение для конкретного примера заключается в следующем:

setNames(as.list(seq_len(n)), paste0("Mx", seq_len(n))) 
+0

Привет, спасибо за ответ! Я сделал то, что вы предлагали, но это не сработало на шаге «присваивать имена». Когда я ввожу код «names (mylist) <- paste0 (« Mx », seq_len (n))», тогда запустите его, он не покажет никаких предупреждающих сообщений. Затем я ввожу, чтобы отобразить «MyList» в консоли, и отображает его так: $ NULL $ NULL – John

+0

... Ну хорошо, теперь он работал ... Я стерла все мысли памяти , Большое спасибо :) – John

Смежные вопросы