2013-04-17 1 views
1

안녕하세요.이 질문은 내가 가지고있는 근본적인 질문입니다. 내 작업을 수행 할 수있는 솔루션이 있다는 것을 알고 있습니다. ,하지만 왜 내 기능이 작동하지 않을 수 있는지 묻고 싶습니다.data.frame을 열별로 분할하고 각 열을 개체의 이름으로 열 이름을 가진 개체로 저장합니다.

나는이

A B C 
1 2 3 
2 3 4 

처럼 보이는 data.frame을하고 난 이름 A, BC 개별 개체로 A, B 또는 C에 각각의 값을 저장합니다.

그래서 여기 내 기능

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

그러나 그것은 작동하지 않습니다. 누군가가 친절하고 내가 옳지 않은 것을 지적 할 수 있습니까?

+0

예상되는 출력을 게시 할 수 있습니까? – Nishanth

+0

출력을 벡터 또는 단일 열'data.frame'으로 원하십니까? – A5C1D2H2I1M1N2O1R2T1

+0

'서브셋 (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 S를 생성한다. 깨끗한 세션

예 : 출력을 억제 invisible의 위의 예에서

> 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 

.

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 
관련 문제