2017-08-11 126 views
0

如何動態地將元素添加到R中列表的組件中?將元素添加到R中列表的組件中動態

例如,supose我有一個名爲「mylist」的list,它有兩個組件,一個叫做「number」,另一個叫做「numberPowerTwo」,如下所示,每個循環週期中需要添加1個元素我的mylist名單。

N <- 10 
mylist <- list(number = c(), numberPowerTwo = c()) 

for (i in 1:N){ 
    n <- i 
    n2 <- i * i 

    mylist[i]$number <- n 
    mylist[i]$numberPowerTwo <- n2 
} 

如果這個代碼工作,因爲我不知道還如何打印結果在一個文件中(使用writewrite.table)我不知道。

回答

2

試試下面的代碼:

N <- 10 
mylist <- list(number = c(), numberPowerTwo = c()) 

for (i in 1:N){ 
    n <- i 
    n2 <- i * i 

    mylist[['number']][i] <- n 
    mylist$numberPowerTwo[i] <- n2 
} 

要作爲一個文件輸出,這取決於你想要的格式。其結果是一個名單,我會建議RData

save(mylist, file = 'mylist.RData') 

那麼你可以簡單load('mylist.RData')

或者您可能需要一個excel文件,如果您有包xlsx,則可以將每個mylist的元素作爲一個表輸出,並將它們合併爲一個文件。否則,您可以對mylist的每個元素只需write.csv

# one file with multiple sheets 
for (i in 1:length(mylist)) { 
    write.xlsx(mylist[[i]], 'mylist.xlsx', append = T, row.names = F, 
       sheetName = names(mylist)[i]) 
} 
# separate files for each element 
for (i in 1:length(mylist)) { 
    write.csv(mylist[[i]], paste0(names(mylist)[i], '.csv')) 
} 
+0

謝謝@林霖!顯然它工作。我怎樣才能打印結果? –

+1

由於列表中的元素總是相同的長度幷包含相關數據,所以最好將它們存儲在'data.frame'中。幸運的是,肖恩的代碼將會工作得一樣。這樣,您可以使用'write.table'來創建數據文件。 –

+0

@GuilhermeCampos請參閱更新。也像Nathan說的那樣,你可以進一步操縱'mylist'來輕鬆輸出。 –