2017-03-20 1 views
0

R에서 일하면서, 여러 데이터베이스가 있습니다. 매년 하나씩 있습니다. 나는 제품명, 1 년이 걸리는 함수를 가지고 있으며 데이터베이스로부터 다양한 디스크립터를 포함하는 데이터 프레임을 뱉어 낸다. 나는 기능을 통해 전달하려는 :인수에 대한 모든 순열을 함수에 적용하여 하나의 데이터 프레임을 만듭니다.

Product <- c("A","B") 

Year <- c("2015","2016") 

을하고 하나의 dataframe를 반환, 그 인수의 모든 순열을 계산할. 나는 mapply 및 rbind를 사용하여 시도했지만 모든 지저분한 것으로 밝혀졌습니다. 어떤 충고?

당신은 tidyr에서 tidyr에서 crossing의 purrr에서 pmapunnest을 조합하여 사용할 수 있습니다
+1

'expand.grid (Product, Year) ' – Zelazny7

+0

안녕하세요. R은 기능이 내장되어있어 계속 놀랄뿐입니다. 이제는 어떻게하면 내 기능에 적용 할 수 있을까요? – user79928

+0

나는 당신의 기능이 무엇인지 이해하지 못합니까? 인수의 순열에 대한 data.frame을 반환하는 함수가 필요하다고 말합니다. 다음 함수 중 하나가 있습니다 :'f Zelazny7

답변

2

:

library(tidyr) 
library(purrr) 

crossings <- crossing(Product, Year) 
crossings$result <- pmap(crossings, find_product_sales) 
crossings <- unnest(crossings, result) 

이것은 find_product_sales 기능은 제품 및 년을 소요, 당신은 코멘트에 설명과 같이 가정한다 데이터 프레임을 반환합니다.

(crossing 대신 expand.grid을 사용할 수 있지만, stringsAsFactors = FALSE도 추가 할 수 있습니다).

2

첫째, 인수 목록으로 분할 그런 다음 인수

params <- expand.grid(Product=Product, Year=Year, stringsAsFactors = F) 

의 순열을 생성

params <- split(params, seq.int(nrow(params))) 

제품 및 연도 마지막으로

my_func <- function(Product, Year) { 
    sprintf("Product: %s, Year: %s", Product, Year) 
} 

를받는 함수를 가지고 매개 변수를 반복하고 함수를 적용하십시오.

lapply(params, function(x) do.call(my_func, x)) 
관련 문제