2015-08-11 3 views
1

Я знал, что список может включать data.frame.Список, содержащий data.frame в R

Это пример.

df<- cbind(column=c(1,2,3), column=c(2,3,4), column=c(3,4,5), column=c(4,5,6)) 

col<-list() 
col[1]<- list(df[,1:2]) 
col[2]<- list(df[,2:3]) 
col[3]<- list(df[,3:4]) 

Результатом является то, что col

col 

[[1]] 
    column column 
[1,]  1  2 
[2,]  2  3 
[3,]  3  4 

[[2]] 
    column column 
[1,]  2  3 
[2,]  3  4 
[3,]  4  5 

[[3]] 
    column column 
[1,]  3  4 
[2,]  4  5 
[3,]  5  6 

Однако, когда я использую for.

col<-list() 

for(i in 1:3){ 

col[i]<- list(df[,i:i+1]) 

} 

В результате

col 

[[1]] 
[1] 2 3 4 

[[2]] 
[1] 3 4 5 

[[3]] 
[1] 4 5 6 

Какова другая точка этих двух подходов? Как получить тот же результат, используя for.?

+3

По readin [это] (https://stat.ethz.ch/R -manual/Р-Devel/библиотека/база/HTML/Syntax.html). Подсказка: это должно быть 'col [i] <- list (df [, i: (i + 1)])' –

+0

@DavidArenburg Arenburg/Большое вам спасибо! : D. Теперь я знаю, что у меня ошибка в моем коде. Кронштейн() всегда является важной вещью ㅜㅜ. – kmangyo

ответ

0

В для заявления вам нужно добавить скобки, как это:

col<-list() 

for(i in 1:3){ 

col[i]<- list(df[,i:(i+1)]) 

} 

В основном в коде «я: я + 1» эквивалентно «(я: я) +1» так «:» имеет приоритет над «+» на этой операции ... или, другими словами, вы делаете (i + 1) :(i + 1)