Продолжение вкладов Брандона Бертельсена в Rcpp. Для меня версия NumericVector не работала: она заменила только первое NA. Это связано с тем, что вектор ina
оценивается только один раз в начале функции.
Вместо этого можно использовать тот же подход, что и для функции IntegerVector. Для меня работали следующие:
library(Rcpp)
cppFunction('NumericVector na_locf_numeric(NumericVector x) {
R_xlen_t n = x.size();
for(R_xlen_t i = 0; i<n; i++) {
if(i > 0 && !R_finite(x[i]) && R_finite(x[i-1])) {
x[i] = x[i-1];
}
}
return x;
}')
Если вам нужна версия CharacterVector, то работает тот же базовый подход:
cppFunction('CharacterVector na_locf_character(CharacterVector x) {
R_xlen_t n = x.size();
for(R_xlen_t i = 0; i<n; i++) {
if(i > 0 && x[i] == NA_STRING && x[i-1] != NA_STRING) {
x[i] = x[i-1];
}
}
return x;
}')
Просто вы определили «phrasedocs» внутри функции, которая не видна снаружи, и возвращение функции должно быть зафиксировано в переменной, отредактируйте ваш код:
dirPath = 'C:/Users/J/kagglemoviereviews/corpus'
phrasedata = processkaggle(dirPath, 5000) # returns 'phrasedata'
phraselist = random_phrase(phrasedata) # returns 'phraselist'
phrasedocs = word_token(phraselist) # returns 'phrasedocs'
phrasedocs2 = process_token(phrasedocs) # returns phrasedocs2
Вы только создали переменную phrasedocs в функции. Поэтому переменная не определена для всего вашего другого кода за пределами этой функции. Когда вы вызываете переменную в качестве входных данных для функции, python не может найти переменную с таким именем. Вы должны создать переменную phrasedocs в своем основном коде.