2013-01-10 72 views
1

工作區我想的stata數據(data.dta)保存爲R數據,然後使用paste函數加載數據,然後分配使用getpaste功能名稱。對象作爲R

library(foreign) 
getwd() 
"C:/Users/Vista/Documents/project" 
year<-2010 
income2010x.dta<-read.dta("data.dta") 
save(income2010x.dta,file="income2010x.rda") 
load(paste0("income" , year , "x.rda")) 
z <- get(paste0("income" , year , "x.dta")) # works 
z <- get(paste0("income" , year , "x.rda")) # doesn't work 
z 
Error in get(income2010x.rda) : object 'income2010x.rda' not found 
ls() 
income2010x.dta 
... 

我發現income2010x.dta被存儲爲對象這些步驟之後,但income2010x.rda不是。所以,z <- get(paste0("income" , year , "x.rda"))沒有工作。任何想法?

回答

1

income2010x.dta<-read.dta("data.dta")

創建data.frame呼叫在工作空間內編income2010x.dta

save允許您保存許多對象,並且當您load它們時,它們將具有與保存它們時相同的名稱。

可以使用saveRDS保存單個對象和readRDS讀給另一名

saveRDS(income2010x.dta,file="income2010x.rda") 
income2010x.rda <- readRDS('income2010x.rda') 

話雖這麼說,我不明白爲什麼你需要兩個副本,或者爲什麼要使用get到創建同一對象的第三個副本爲z

+0

爲什麼當您將'year'設置爲2000時,R在其名稱中尋找「2010」的內容? –

+0

@mnel:謝謝。使用保存不會創建.rda對象。所以,我嘗試使用負載。 'income2010x.rda < - readRDS('income2010x.rda')'產生錯誤。 @NockCox:我現在編輯了。 – Metrics

+0

你使用過'saveRDS'嗎?我的解決方案呢? – mnel

1

當你這樣做:

load(paste0("income" , year , "x.rda")) 

....你得到(以「獲取」或「訪問」或「恢復」的口語意義)一個對象(或多個對象),它們被命名爲它保存時的任何命名。在這種情況下,你將有一個名爲「income2010x.dta」的對象,但沒有名爲「income2010x.rda」對象,因此在R功能的限制意義這「取」:

z <- get(paste0("income" , year , "x.rda")) 

....作爲你觀察到......「不起作用」。

+0

感謝您的確認。有任何其他方式要求R使用get讀取.rda文件嗎? – Metrics

+0

'get'用於訪問工作區中的對象。 '* .rda'文件不在工作區中。你想解決什麼問題? –

+0

我有'stata'文件,我需要'rda'版本的這些文件在工作區中。我怎樣才能做到這一點? – Metrics