2013-07-10 78 views
1

我有一個數據框的列表,它是從一次讀取25個.csv文件中生成的。我想取消數據框以開始空間分析。也就是說,我想爲列表中的每個元素都有單獨的數據框架。我試過unlist(),但它不會產生我想要的結果。我也嘗試過使用lapply()的方法,但它會產生錯誤。這是我試過的:爲列表中的每個元素創建一個單獨的變量

x <- 1:3 
y <- 4:6 

l <- lapply(1:2, function(x){data.frame(x, y)}) 

lapply(1:length(l), function(i){paste('df', i, sep = '') <- data.frame(l[[i]])}) 

這個問題似乎是在分配數據幀到粘貼名稱。用as.character()包裝它沒有幫助。

這並不工作:

"df1" <- data.frame(l[[1]]) 

看來問題是我paste()函數的輸出某處,但輸出具有str()「CHR」。任何想法如何讓我的方法工作?有沒有更清晰的方式來取消我的數據框?這樣做的

+3

'?assign',如果你覺得你必須這樣做,或'?attach'。將它們保存在列表中通常是一個更好的主意。 – baptiste

+0

題外話,但爲什麼分配給''「df1」'工作?我不會期望它。 – Marius

+0

@Marius - 從' 「< - 」'其中它指出'X < - value'和'×:變量名(可能援引)'因此,這意味着' 「< - 」(等等,1:10)'和'「< - 」(「blah」,1:10)'給出相同的結果。 – thelatemail

回答

4

方式一:

list2env(setNames(l,paste0("df",seq_along(l))), envir = parent.frame()) 

雖然我會聽從@baptiste的建議之前,它是爲時已晚,避免這樣做。 爲什麼?因爲在兩天之內,您會發現自己被困在使用get()paste以及混亂的循環中,試圖一次將所有數據集應用於一個函數。如果你把它們放在列表中,你可以做lapply(l,functionname)

+1

很好的答案。這些對我來說都是新功能。我想我背後的動機是列表中的新手,所以看起來更容易。但是現在沒有時間了,所以我只是試着將它作爲一個列表並學習一兩件事。謝謝。 – vitale232

相關問題