2013-09-06 2 views
1

내 질문은 문자열을 여러 패턴과 일치시키는 주제를 토대로 작성되었습니다. here에 설명 된 한 가지 해결책은 2 차원 매트릭스를 산출하는 sapply(keywords, grepl, strings, ignore.case=TRUE)을 사용하는 것입니다.조회를위한 환경 사용 방법

그러나 5K + 키워드 및 60K + 문자열에이 접근법을 적용 할 때 상당한 속도 문제가 발생합니다 (12 시간 후에 프로세스가 취소됨).

하나의 아이디어는 해시 테이블이나 환경을 R에서 사용하는 것입니다. 그러나 숫자 인덱스를 유지하면서 내 문자열을 환경으로 변환하고 변환하는 방법을 얻지 못합니까? assign에서 x 같이 문자 여야합니다 strings[60000]

e <- new.env(hash=TRUE) 

    for (i in 1:length(strings)) { 
     assign(x=i, value=strings, envir=e) 
    } 

까지 내가 strings[1]

는 ..., 나는 이런 식으로 사용할 수 없습니다,하지만 난 당신이 내 idea..I이 원하는 얻을 희망 같은 숫자로 환경을 색인 할 수 있음 string[...] 벡터

도움 주셔서 감사합니다!

+0

룩업 사전 당신이하지 않는 환경으로 문자열을 넣어 것입니다. 따라서 키워드는 조회에 사용될 것입니다. 해시 (envir) 검색은 a와 b를 검색하는 2 열 매트릭스/데이터 프레임입니다. 그래서 문자열은 실제로 거기에 가지 않습니다. 또한 나는 정말로 당신을 늦추는 것이'grepl '이라고 추측합니다. 어쨌든 이는 재현 가능한 예가 아닙니다. 지금까지 시도한 데이터와 코드를 게시하십시오. 이전 질문을 단순히 언급하지 않고 각 질문에 대한 데이터를 제공하십시오. 답장을 보내 주셔서 감사합니다. –

답변

1

환경이 Perl 해시만큼 사용되지 않는 것 같아요. 을 수행하는 데있어 '관용구'가 널리 이해되지 않았기 때문에 이라고 생각합니다. 귀하의 경우에 핵심 질문은 실제로 숫자 지수를 원하십니까? 그렇다면 값이어야합니다. 열쇠는 여러분의 문자열입니다. 이것이 바로 운동의 요점입니다. 이 예에서

e <- new.env(hash=T) 
strings <- as.character(chickwts$feed) # note! not unique 
sapply(1:length(strings), function(i)assign(strings[i], i, e)) 
e$horsebean # returns 10 

는 각 문자열 와 관련된 마지막 인덱스는 유지됩니다,하지만 당신은 그런 지수의 벡터 각 키에 유용 할 수 있습니다 아무것도 할당 할 수 있습니다.

그런 다음 여러 가지 방법으로 데이터를 조회 할 수 있습니다. 당신은 예를 들어, LS를 사용하여 키에 대한 검색 을 정규식 등) (MGET을 사용하여 값을 검색 할 수 있습니다

# find all keys containing 'beans' 
ls(e, patt='bean') 
# retrieve bean data 
mget(ls(e, pat='bean'),e) 
+0

하지만이 방법으로 조회를 수행하는 데 도움이 될지 모르겠다. 환경 변수 (= 문자열)에'grepl '을 적용해야한다 .'appapply (keywords, grepl, e, ignore. case = TRUE)'가 작동하지 않습니다. – SPi

+0

환경에서 물건을 찾는 데 약간의 추가가 있지만 도움이되는지 알기위한 요구 사항에 대해 충분히 알지 못합니다. –

관련 문제