2011-01-25 4 views
8

날짜 열, 가격 열 및 반환 열이 포함 된 4 개의 데이터 프레임이 있습니다.각 데이터 프레임에 함수 적용

data.1 :

Date  Price Return 
2009-01-02 100 0.2 
2009-01-03 110 0.1 
etc. 

data.2 :

Date  Price Return 
2009-02-02 60 0.15 
2009-02-03 50 -0.1 
etc. 

I는 밀도 값을 리턴 루프를 설정하고, 각각의 데이터 프레임() 함수 밀도를 적용하고자 반환합니다. , 목록을 만드는 루프를 설정하고 lapply 사용에 대한()이 작업을 수행하는 통해

I , 그래서

> ff <- list(data.1, data.2, data.3, data.4) 
> for(i in 1:length(ff){ 
     density[[i]] <- lapply(ff, density(ff[[i]]$Return))} 

그러나 이것은 분명히 작동하지 않습니다. 누가 나에게 도움을 줄 수 있니? 수동 할당 그렇게하려면 다니가

답변

10

먼저 밀도를 초기화해야 - 사전에

감사합니다.

densities <- list() 

둘째, 재미있는 방법으로 밀도 함수를 사용합니다. lapply에서 다른 기능을 지정해야합니다. 쉼표 뒤에 함수와 추가 인수를 주거나, 아래에 표시된 것처럼 lapply 호출에서 사용자 정의 작은 함수를 구성하십시오.

data.1 <- data.frame(
    X1 = letters[1:10], 
    X2 = 1:10 
) 

data.2 <- data.frame(
    X1 = letters[11:20], 
    X2 = 10:1 
) 

ff <- list(data.1,data.2) 

densities <- lapply(ff,function(i) {density(i$X2)}) 

이렇게하면 목록이 자동으로 반환됩니다. 당신은뿐만 아니라 이름을 사용할 수

densities[[1]]$x 

이전에 목록라는 이름의 경우 :

names(ff) <- c("data.1","data.2") 

densities <- lapply(ff,function(i) {density(i$X2)}) 
densities[['data.1']]$x 
+0

죄송합니다. 이해가 안됩니다. 그 중 하나의 밀도는? – Dani

+0

@Dani : 죄송합니다, 실수, 잘못 읽었습니다 –

+0

문제는 해결할 수 있습니다. 잘 작동합니다! 나는 하나의 질문을 남겼습니다 : 어떻게 density()가 계산 한 값에 접근 할 수 있습니까? 그래서 예를 들어, 나를 위해 계산 된 밀도의 x 값 (반환 값) 만 선택하고 싶습니다. 밀도 [1]은 데이터에 대한 결과만을 선택합니다 1. 이제 데이터의 보간 된 x 값만 선택할 수 있습니까? 1. 밀도 [[1 $ x]]가 작동하지 않습니다 ... – Dani

3

것은

은 단순히 목록 인덱스를 사용, 그것의 데이터를 얻으려면 lapply는 for-loop를 사용할 필요가 없다는 것입니다. 이게 작동해야합니다 :

data.1=data.2=data.3=data.4=matrix(rnorm(30),ncol=3) 

ff=list(data.1,data.2,data.3,data.4) 

densities=lapply(ff,function(x)density(x[,3])) 

분명히 이것을하는 더 좋은 방법이 있습니다. (나는 목록의 수동 할당을 의미합니다).

관련 문제