2017-05-16 11 views
1

또는 sapply을 사용하는 data.frames의 두 목록을 사용하는 날짜에 작업을하려고합니다. 다음은 두 목록입니다.목록의 하위 집합에 적용

list_1 <- list(a=data.frame(date=c("2017-01-01","2017-02-02"),v1=1:2, 
       stringsAsFactors = FALSE), 
       b=data.frame(date=c("2017-03-03","2017-04-04"),v1=3:4, 
       stringsAsFactors = FALSE)) 
list_2 <- list(a=data.frame(date=c("2018-01-01","2018-02-02"),v1=1:2, 
        stringsAsFactors = FALSE), 
       b=data.frame(date=c("2018-03-03","2018-04-04"),v1=3:4, 
       stringsAsFactors = FALSE)) 

두 목록을 모두 사용하여 날짜 열에 기능을 적용하고 싶습니다. 이 예에서는 difftime을 사용합니다. list_1 및 list_2에 listdifftime의 날짜 열을 가져오고 싶습니다. 결과는 다음과 같을 것이다 : 나는이 목록의 하위 집합을 사용하여 날짜 만 열을 유지하기 위해 노력했다

$a 
    difftime 
1 365 
2 365 

$b 
    difftime 
1 365 
2 365 

:

subset_list_1 <- lapply(list_1, "[", 1) 
subset_list_2 <- lapply(list_2, "[", 1) 

그러나, 결과는 여전히 data.frame이다. 어떤 이유로 인해 "["이 일반적으로 적용되는 drop=TRUE이 발생하지 않았습니다.

> str(subset_list_1) 
List of 2 
$ a:'data.frame': 2 obs. of 1 variable: 
    ..$ date: chr [1:2] "2017-01-01" "2017-02-02" 
$ b:'data.frame': 2 obs. of 1 variable: 
    ..$ date: chr [1:2] "2017-03-03" "2017-04-04" 

나는 다음 mapplysapply했지만, 나는 difftime에 벡터를 공급하고 있지 않다 있기 때문에 오류가 발생합니다 용의자. 즉

mapply(difftime,subset_list_1,subset_list_2,SIMPLIFY = FALSE) 
Error in as.POSIXct.default(time1) : 
    do not know how to convert 'time1' to class “POSIXct” 

sapply(subset_list_2,difftime,subset_list_1) 
Error in as.POSIXct.default(time1) : 
    do not know how to convert 'time1' to class “POSIXct” 

, 내가 할 노력하고있어 다음하지만 mapply 또는 sapply로 :

difftime(unclass(subset_list_2[[1]])$date,unclass(subset_list_1[[1]])$date) 
Time differences in days 
[1] 365 365 
difftime(unclass(subset_list_2[[2]])$date,unclass(subset_list_1[[2]])$date) 
Time differences in days 
[1] 365 365 

어떤 생각?

답변

1

우리는 대신 [

Map(function(...) data.frame(difftime = as.numeric(difftime(...))), 
       lapply(list_1, `[[`, 1), lapply(list_2, `[[`, 1)) 
[[를 사용하여 vector로 추출해야