2015-08-14 2 views
2

Предположим, у меня есть пустой список grid. Можно ли использовать assign() для назначения нескольких кадров данных для элементов списка?R: using assign() для элементов списка

grid <- list() 

assign(grid[[1]],data.frame(x=1:4,y=5:8)) 
assign(grid[[2]],data.frame(x=2:4,y=6:8)) 

Так что вы получите выход, как:

> grid 
[[1]] 
    x y 
    1 5 
    2 6 
    3 7 
    4 8 
[[2]] 
    x y 
    2 6 
    3 7 
    4 8 

Код:

grid <- list() 
type = "a" 

for(k in 1:3){ 
    assign(paste0("grid[[",k,"]]"),ifelse(type=="a", 
       data.frame(x=1:4,y=5:8), 
       data.frame(x=2:4,y=6:8))) 
} 

Желаемый результат: (так как тип всегда будет "")

> grid 
[[1]] 
    x y 
    1 5 
    2 6 
    3 7 
    4 8 
[[2]] 
    x y 
    1 5 
    2 6 
    3 7 
    4 8 
[[3]] 
    x y 
    1 5 
    2 6 
    3 7 
    4 8 
+2

Что случилось со всеми другими способами присвоения элементов списка, который заставляет вас думать, что вам нужно использовать 'assign'? – joran

+0

Ну, я пытаюсь использовать 'ifelse()' внутри 'assign()'. Мне нужно условно выбирать между двумя кадрами данных и назначать выбранный блок данных элементу в списке. Если есть более чистая альтернатива использованию 'assign()' в этом сценарии, это будет замечательно – ALKI

+0

Можем ли мы увидеть код @Chani? не могут полностью изобразить 'ifelse' и' assign' вместе? – RichAtMango

ответ

1

Возможно, мне что-то не хватает, но я не понимаю, почему вы нужно использовать assign()? Разве это не делает то, что вы хотели?

grid <- list() 
type = "a" 

for(k in 1:3){ 
    if(type=="a") grid[[k]] <- data.frame(x=1:4,y=5:8) 
} 

EDIT:

for(k in 1:3){ 
    if(type=="a") grid[[k]] <- data.frame(x=1:4,y=5:8) 
    if(type=="b") grid[[k]] <- data.frame(x=2:4,y=6:8) 
} 
+0

Спасибо за ответ. Однако я хочу, чтобы там был другой фрейм данных, например, если 'type =" b "'. – ALKI

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

  • Нет связанных вопросов^_^