2013-02-01 4 views
0

data.frame 개체 (training_data)의 명명 된 목록이 있습니다. 각 data.frame 객체는 "x"열을 기준으로 테스트되고 테스트가 통과되면 해당 data.frame 객체의 이름이 반환됩니다. 아래의 경우 df의 이름 지정된 목록에서 루프, df의 열에서 테스트 조건이 true 인 경우 목록 요소의 이름 반환

은, "는이"와 "B"를 반환 할 생각됩니다

df <- data.frame(x=1:10, y=1:10) 
df1 <- data.frame(x=11:20, y=11:20) 
training_data <- list(df, df, df1, df1) 
names(training_data) <- c("a", "b", "c", "d") 

pos <- lapply(training_data, function(data) { 
           if(data$x==1) 
            ["return the name of the data.frame object in hand"] 
           }) 

내 질문은 하나가 현재 lapply의 반복 내에서 처리되는 개체의 이름을 확인하는 방법을 정확히 그 이름을 반환하여 "pos"목록으로 이동하는 방법.

감사

+0

일부 샘플 데이터를 입력하십시오. 이해가 안되면 [읽으세요.] (http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example). ..'lapply' 함수 안에서'if'를 본 적이 없습니다.'ifelse' (vectorized)를 원하지 않습니까? –

답변

2

, 당신은 예를 들어 목록에 액세스 할 수 있습니다 여기에 lapply를 사용할 필요가 없습니다 :

training_data[['pos']] 

이것은 당신이 'POS'또는 ​​posxx라는 data.frame에 ACESS 줄 것이다 ... 영업 설명 후

편집

내가, 내가 목록의 이름에 lapply 사용 D 나는 당신이

unlist(pos) 
[1] "a" "b" 

같은 것을 사용하여 NULL 요소를 제거 할 수 있습니다 위의 주요 목록

pos <- lapply(names(training_data), function(data) { 
    if(training_data[[data]]$x==1)  ## here your condition is not correct 
    data 

}) 

    [[1]] 
[1] "a" 

[[2]] 
[1] "b" 

[[3]] 
NULL 

[[4]] 
NULL 

에 대한 액세스의 동일한 모드를 사용하지만 난 당신이 sapply를 사용하는 경우가 여기에 더 나은 결과를 얻을 것이라 생각합니다, 명명 된 목록을 반환합니다.

+0

training_data는 여러 data.frame 개체가 포함 된 목록입니다. 조건은 data.frame 객체 내부에 포함 된 레이블 필드에 배치됩니다. – Shahzad

+0

아니요. "현재 처리중인 객체의 이름을 결정하는 방법"을 묻습니다. 이제 "label 필드에 data.frame 객체가 들어 있습니다"? 무슨 뜻이야? 열 이름? – agstudy

+0

아니요. 열 이름이 아닙니다. list의 각 요소 (이 경우 데이터 프레임 객체)의 이름이 지정됩니다. 이 data.frame의 이름을 결정하고 싶습니다. 다음 조건은 true입니다. if (x $ label == "pos") 그런 다음이 data.frame 개체의 이름을 반환합니다. – Shahzad