데이터 프레임을 반복하고 Rcpp에서 공백으로 구분 된 단어 블록을 연결하려고합니다.
Stack Overflow에 대한 몇 가지 답변을 읽으려고 시도했지만 Rcpp에서 문자열이 연결되는 방식에 대해 완전히 혼란 스럽습니다. (예 : StringVector와 Rcpp 연결 )
C ++에서는 + 연산자를 사용하여 문자열을 추가 할 수 있다는 것을 알고 있습니다.
이것은 아래 내 Rcpp 기능입니다.
cppFunction('
Rcpp::StringVector formTextBlocks(DataFrame frame) {
#include <string>
using namespace Rcpp;
NumericVector frame_x = as<NumericVector>(frame["x"]);
LogicalVector space = as<LogicalVector>(frame["space"]);
Rcpp::StringVector text=as<StringVector>(frame["text"]);
if (text.size() == 0) {
return text;
}
int dfSize = text.size();
for(int i = 0; i < dfSize; ++i) {
if ( i !=dfSize ) {
if (space[i]==true) {
text[i]=text[i] + text[i+1] ;
}
}
}
return text;
}
')
오류는 라인에 있습니다. error: no match for 'operator+'
루프 내에서 문자열을 어떻게 연결할 수 있습니까?
에 operator+
대해 정의 std::string
되었으므로 다음 대신 text
열을 변환하여 사용하는 것이 가장 쉽습니다 .std::vector<std::string>
Rcpp::StringVector
Rcpp::cppFunction('
std::vector<std::string> formTextBlocks(DataFrame frame) {
LogicalVector space = as<LogicalVector>(frame["space"]);
std::vector<std::string> text=as<std::vector<std::string>>(frame["text"]);
if (text.size() == 0) {
return text;
}
int dfSize = text.size();
for(int i = 0; i < dfSize - 1; ++i) {
if (space[i]==true) {
text[i]=text[i] + text[i+1];
}
}
return text;
}
')
set.seed(20191129)
textBlock <- data.frame(space = sample(c(TRUE, FALSE), 100, replace = TRUE),
text = sample(LETTERS, 100, replace = TRUE),
stringsAsFactors = FALSE)
formTextBlocks(textBlock)
#> [1] "B" "N" "G" "BM" "M" "O" "C" "F" "OQ" "Q" "FH" "H" "D" "HK" "KH"
#> [16] "H" "S" "LX" "XO" "OY" "Y" "E" "VD" "D" "TN" "N" "LL" "LQ" "Q" "F"
#> [31] "XX" "X" "S" "R" "P" "L" "M" "GK" "KD" "DD" "D" "H" "M" "M" "K"
#> [46] "N" "GP" "PG" "G" "P" "G" "O" "N" "NY" "Y" "OX" "X" "LX" "XF" "FS"
#> [61] "SE" "E" "PS" "S" "YD" "D" "F" "Z" "H" "ZN" "N" "OM" "M" "XH" "HV"
#> [76] "V" "OX" "X" "J" "BZ" "Z" "FZ" "ZE" "E" "SV" "V" "G" "F" "DZ" "ZF"
#> [91] "F" "PB" "B" "K" "N" "U" "B" "PV" "V" "C"
2019-11-29에 reprex 패키지 (v0.3.0)에 의해 생성됨
메모:
#include
와 using
. 이것들은 필요하지 않으며 함수 정의 내에 속하지 않습니다.i != dfSize
절대로 테스트를 제거했습니다 false
.i+1
.이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다