2016-08-18 2 views
1

가정하자 나는 다음과 같은 배열이 있습니다추출물 "N"R의 배열의 크기 순서

a <- sample(letters,100,replace=TRUE) 

가 그럼 난 모든 가능한 'N'크기의 시퀀스를 추출 할, 그 편지는 순서대로 정렬됩니다 가정을 그 배열. 예를 들어 :

n=2을 위해 내가 할 것이다 : paste0(a[1:99],"->",a[2:100])

n=3을 위해 내가 할 것 : paste0(a[1:98],"->",a[2:99],"->",a[3:100])

당신은 점을 얻는다. 자, 내 목표는 입력 n 걸릴 함수를 만드는 것입니다 배열에서 주어진 길이의 시퀀스의 해당 집합을 다시 a

나는 루프를 사용하여 그것을 할 수 있었지만 나는 하나의 고성능 라이너를 기대합니다.

나는 기존의 모든 기능을 인식하지 못하기 때문에 R에 조금 익숙하다.

+3

'embed (a, n)'... 이상한 이름으로 애매한 함수를 사용해 보시고 정확하게 이것을하는 것처럼 보입니다. – Frank

+0

@Frank 처음에는 작동하지 않는다고 생각했지만 마지막 열에서 시작하여 출력을 읽었습니다. 그리고 그것은 정확했습니다. 마지막 열에서부터 시작하여 각 열을 첫 번째 열로 어셈블하는 방법을 알아 내야합니다. 하나의 배열에 – Imlerith

+0

'embed (a, n) [, n : 1]' – Frank

답변

3

embed을 사용할 수 있습니다. embed(a, 3), 이것은 열

a[2:99]
  • 순차 a[1:98]
  • a[3:100]

    • 와 매트릭스를 제공한다.
      res = embed(a, 3)[, 3:1] 
      

      는 열 사이 인쇄 화살표 원한다면

      는 다음
      do.call(paste, c(split(res, col(res)), sep = " -> ")) 
      

      한 방법이다 :

      열의 순서 사용 행렬 구문 m[rows, cols]을 반대로. 이는 apply(res, 1, something)보다 성능이 우수합니다. 이는 apply이 행을 반복하는 동안 벡터화되기 때문에 성능이 좋습니다.
      • 는 목록을 반환 ...

        library(data.table) 
        do.call(paste, c(shift(a, 2:0), sep = " -> "))[-(1:2)] 
        

        shift는 제외 embed 같다 :

        @DavidArenburg에 의해 지적

        ,이 유사 data.table 수행 할 수 있습니다 매트릭스가 아니기 때문에 split에 의해 col에 붙여 넣을 필요가 없습니다.

      • 패드가 잘못되었습니다. 전체 길이를 유지하는 값을 노래, 그래서 우리는 -(1:2)

      내가 R에 알려지지 않은 기능을 찾는 방법에 대한 유용한 뭔가 말을 기대했다 떨어질해야하지만 embed 될 수 있는지에 주로 빈 와서 녹이다. 아마도...어떤 HTML 도움말 페이지

      1. 이동 하단
      2. 에서 "인덱스"하이퍼 링크 매 페이지

      읽기를 클릭?

  • +0

    Thanks @ David, added – Frank