2016-07-07 3 views
0

현재 데이터 프레임에서 R의리스트를 서브 세트하려고합니다.서브 세트 할 때 R 배가리스트 길이

list.level <- unique(buckets$group) 
bucket.group <- vector("list",length(list.level)) 

for(i in list.level){ 
    bucket.group[[i]] <- subset(buckets$group,buckets$group == i) 
} 

그러나, 대신 목록을 채우는은 행의 같은 양의 복제 목록을 만들 것 반환 :처럼 나의 현재 시도가 보이는

[[1]] 
NULL 

[[2]] 
NULL 

... 

NULL 

[[22]] 
NULL 

[[23]] 
NULL 

$A 
[1] "A" 

$C 
[1] "C" "C" "C" 

$D 
[1] "D" "D" "D" 

... 

$AJ 
[1] "AJ" "AJ" "AJ" "AJ" "AJ" 

$AK 
[1] "AK" "AK" 
A가 1로 작성해야한다

, C로 2 등, 등 어떻게 목록의 맨 아래에 여분의 행을 만드는 대신 원래의 행을 채우기 위해 어떻게해야합니까?

+1

예제를 만들 수 있습니까 [reproducible?] (http://stackoverflow.com/q/5963269/903061) – Gregor

답변

0

이 작동합니다 작성해야 :

list.level <- unique(buckets$group) 
bucket.group <- vector("list",length(list.level)) 

for(i in 1:length(list.level)){ 
    bucket.group[[i]] <- subset(buckets$group,buckets$group == list.level[i]) 
} 
+0

감사합니다. – Nick

1

다음은 무슨 일입니까? buckets$groupc("a","a","b","b")이라고 가정합니다. 불러 length(list.level)bucket.group 2 개 NULL 요소의 목록입니다 지금,이 때문에

list.level <- unique(buckets$group) 

지금 list.levelc("a","b")

bucket.group <- vector("list",length(list.level)) 

이다, 그들의 이름은 1이며, 2

for(i in list.level){ 

list.level의 값인 경우 for i in c("a","b")과 같습니다. bucket.group[[1]]bucket.group[[2]]은 그대로 유지하면서 "a""b" 이상

 bucket.group[[i]] <- subset(buckets$group,buckets$group == i) 

i 이후 루프, 당신은 지금, bucket.group[["a"]]bucket.group[["b"]] 입력합니다.

는이 문제를 해결하려면, 당신은 대신

list.level <- unique(buckets$group) # ok, this was correct 
bucket.group <- list() # just empty list 
for(i in 1:length(list.level)){ 
    bucket.group[[i]] <- buckets$group[buckets$group == list.level[[i]] ] 
} 
1

을 나는 문제가 당신의 for 문으로 생각합니다.

코드는 다음과 같다 :

list.level<-letters[1:10] 
> for(i in list.level) print(i) 
[1] "a" 
[1] "b" 
[1] "c" 
[1] "d" 
[1] "e" 
[1] "f" 
[1] "g" 
[1] "h" 
[1] "i" 
[1] "j" 

그것은 내가에 list.level의 각 요소를 할당, 그래서 i 편지입니다.
bucket.group[[i]] <- subset(buckets$group,buckets$group == i) 첫 번째 반복에서 i은 문자입니다. 따라서 bucket.group[["a"]]이라는 목록 요소를 찾아서 찾지 못하기 때문에이를 생성하고 거기에 데이터를 저장합니다. 대신 당신이 seq_along

for(i in seq_along(list.level)) print(i) 
[1] 1 
[1] 2 
[1] 3 
[1] 4 
[1] 5 
[1] 6 
[1] 7 
[1] 8 
[1] 9 
[1] 10 

를 사용하는 경우 지금 i는 항상 곁에 수있을 것입니다 및 코드는 당신이 원하는 것을 할 것입니다.

대신 seq_along을 사용하십시오.

관련 문제