2013-04-17 56 views
1

HI這是我與R的基本問題。我知道可能有解決方案來完成我的任務,但我想問爲什麼我的功能不能工作。按列拆分data.frame並將每列作爲對象存儲,並將列名稱作爲對象的名稱

我有data.frame看起來像這樣

A B C 
1 2 3 
2 3 4 

,我想每個值存儲在ABC與名稱ABC單個對象。

所以在這裏我的功能

splitcolnames<-function(x) 
    {for (i in colnames(x)){ 
    subset(x, select=c(i))->i}} 
} 

但它不工作。有人可以善意指出我不對的是什麼?

+0

你能發佈預期的輸出嗎? – Nishanth

+0

你想把你的輸出作爲向量還是單列data.frame? – A5C1D2H2I1M1N2O1R2T1

+0

'subset(x,select = c(i)) - > i}}'是無效的語法 –

回答

1

以下情況之一應該爲您做,假設您的data.frame被命名爲「mydf」。

lapply(names(mydf), function(x) assign(x, mydf[x], envir = .GlobalEnv)) 
lapply(names(mydf), function(x) assign(x, mydf[, x], envir = .GlobalEnv)) 

第一個將創建單柱data.frame s,而第二個將創建vector秒。

實施例在一個乾淨的會話:

> rm(list = ls()) 
> ls() 
character(0) 
> mydf <- data.frame(A = c(1, 2), B = c(3, 4)) 
> mydf 
    A B 
1 1 3 
2 2 4 
> invisible(lapply(names(mydf), function(x) assign(x, mydf[x], envir = .GlobalEnv))) 
> ls() 
[1] "A" "B" "mydf" 
> A 
    A 
1 1 
2 2 
> rm(list = ls()) 
> mydf <- data.frame(A = c(1, 2), B = c(3, 4)) 
> invisible(lapply(names(mydf), function(x) assign(x, mydf[, x], envir = .GlobalEnv))) 
> ls() 
[1] "A" "B" "mydf" 
> B 
[1] 3 4 

在上述中invisible實施例抑制輸出。

0

而我@RomanLustrik的評論,這可能不是一個好主意同意, 你正在尋找的功能是assign

for (i in colnames(x)) 
    assign(i, subset(x, select=i)) 

> A 
# A 
# 1 1 
# 2 2 

> B 
# B 
# 1 2 
# 2 3 

這樣說,你知道attach的功能?

?attach 
相關問題