Есть у меня функция которая ищет паттерн/последовательность в другой большой строке , если нашла то ИТИНА иначе ЛОЖЬ
илюстрация
У меня есть функция на Рке но она медленная для больших вычислений , вернее есть даже несколько функций написаных разными стилями..
вот так к примеру выглядят входные данные , кстати обе строки могут быть произвольной длинны
dat <- sample(letters[1:20],size = 30,replace = T)
pat <- c('a',"c","g")
dat
[1] "h""c""q""a""s""a""d""b""c""n""a""t""e""q""s""k""j""t""l""j""n""t""r""m""h"
[26] "b""o""e""g""h"
pat
[1] "a""c""g"
вот первая s1 функция написана в стандартном стиле, понятная но громоздкая
Есть у меня функция которая ищет паттерн/последовательность в другой большой строке , если нашла то ИТИНА иначе ЛОЖЬ
илюстрация
У меня есть функция на Рке но она медленная для больших вычислений , вернее есть даже несколько функций написаных разными стилями..
вот так к примеру выглядят входные данные , кстати обе строки могут быть произвольной длинны
вот первая s1 функция написана в стандартном стиле, понятная но громоздкая
или что то более елегантное s2
обе делают одно и то же
У меня вопрос/прозьба - можешь написать єту простую функцию на rcpp для меня?
Не готов браться за это, поскольку нет свободного времени, да и не очень люблю кодить и дебажить. Да и вам будет полезнее разобраться самому. На какие-то конкретные технические вопросы отвечу, если смогу.
Не готов браться за это, поскольку нет свободного времени, да и не очень люблю кодить и дебажить. Да и вам будет полезнее разобраться самому. На какие-то конкретные технические вопросы отвечу, если смогу.
спасибо что не помог) сам разобрался и это здорово )
есть вопрос: как сделать так чтобы входные переменные pat dat могли принимать как числовые вектора (как сейчас) так и строковые (string vector) ?
п.с. Функция оказалась всего в 6 раз быстрее (( я думал будет хотябы 100 кратный прирост (((
microbenchmark::microbenchmark( yes_seq(pat,dat), yes_seq_cpp(pat,dat))
Unit: microseconds
expr min lq mean median uq max neval cld
yes_seq(pat, dat) 42.19343.33344.7871243.90345.0435106.052100 b
yes_seq_cpp(pat, dat) 5.7015.9876.619936.2726.842522.807100 a
Этот пост я понимаю, что теперь вроде бы всегда компилируются пакеты, что кстати видно при обновлении пакетов , строка byte-compile and prepare package for lazy loading .
Но считаю, что пользовательский код НЕ компилируется. Загружаем функции по source и в описании source не видел, что загружаемая функция компилируется
Этот пост я понимаю, что теперь вроде бы всегда компилируются пакеты, что кстати видно при обновлении пакетов , строка byte-compile and prepare package for lazy loading .
Но считаю, что пользовательский код НЕ компилируется. Загружаем функции по source и в описании source не видел, что загружаемая функция компилируется
есть вопрос: как сделать так чтобы входные переменные pat dat могли принимать как числовые вектора (как сейчас) так и строковые (string vector) ?
Первая идея сделать перегрузку - написать ещё одну функцию с тем же именем, но с другими аргументами. Никогда такого не делал в Rcpp, поэтому не знаю получится ли. Ещё, наверное, придётся делать си-код в отдельном файле и использовать sourceCpp() вместо cppFunction().
Для авторизации и пользования сайтом MQL5.com необходимо разрешить использование файлов Сookie.
Пожалуйста, включите в вашем браузере данную настройку, иначе вы не сможете авторизоваться.
Вы вошли в аккаунт. Двухфакторная аутентификация отключена. Настройте её заново и отсканируйте новый QR-код или продолжите с отключённой двухфакторной аутентификацией.
Есть у меня функция которая ищет паттерн/последовательность в другой большой строке , если нашла то ИТИНА иначе ЛОЖЬ
илюстрация
У меня есть функция на Рке но она медленная для больших вычислений , вернее есть даже несколько функций написаных разными стилями..
вот так к примеру выглядят входные данные , кстати обе строки могут быть произвольной длинны
вот первая s1 функция написана в стандартном стиле, понятная но громоздкая
s1 <- function(pat , dat){ lv <- rep(F,length(pat)) k <- 1 for(i in 1:length(dat)){ if(dat[i] == pat[k]) { lv[k] <- TRUE k <- k+1 } if(k==length(pat)+1) break } return( all(lv) ) }или что то более елегантное s2
обе делают одно и то же
У меня вопрос/прозьба - можешь написать єту простую функцию на rcpp для меня?
как у Решетова, - несколько десятков страниц назад
(и не в библиотеке дело)
Есть у меня функция которая ищет паттерн/последовательность в другой большой строке , если нашла то ИТИНА иначе ЛОЖЬ
илюстрация
У меня есть функция на Рке но она медленная для больших вычислений , вернее есть даже несколько функций написаных разными стилями..
вот так к примеру выглядят входные данные , кстати обе строки могут быть произвольной длинны
вот первая s1 функция написана в стандартном стиле, понятная но громоздкая
или что то более елегантное s2
обе делают одно и то же
У меня вопрос/прозьба - можешь написать єту простую функцию на rcpp для меня?
Не готов браться за это, поскольку нет свободного времени, да и не очень люблю кодить и дебажить. Да и вам будет полезнее разобраться самому. На какие-то конкретные технические вопросы отвечу, если смогу.
Не готов браться за это, поскольку нет свободного времени, да и не очень люблю кодить и дебажить. Да и вам будет полезнее разобраться самому. На какие-то конкретные технические вопросы отвечу, если смогу.
спасибо что не помог) сам разобрался и это здорово )
Р код
yes_seq <- function(pat , dat){ lv <- rep(F,length(pat)) k <- 1 for(i in 1:length(dat)){ if(dat[i] == pat[k]){ lv[k] <- TRUE k <- k+1 } if(k==length(pat)+1) break } return( all(lv) ) }Rcpp код
есть вопрос: как сделать так чтобы входные переменные pat dat могли принимать как числовые вектора (как сейчас) так и строковые (string vector) ?
п.с. Функция оказалась всего в 6 раз быстрее (( я думал будет хотябы 100 кратный прирост (((
спасибо что не помог) сам разобрался и это здорово )
Р код
Rcpp код
есть вопрос: как сделать так чтобы входные переменные pat dat могли принимать как числовые вектора (как сейчас) так и строковые (string vector) ?
п.с. Функция оказалась всего в 6 раз быстрее (( я думал будет хотябы 100 кратный прирост (((
Можно скомпилировать код R (compile). У меня дало почти 3-х кратное ускорение работы кода.
Вместо for использовать foreach, загрузив все ядра.
Можно скомпилировать код R (compile). У меня дало почти 3-х кратное ускорение работы кода.
Вместо for использовать foreach, загрузив все ядра.
начиная с версии R 3.4 компиляция cmpfun включена по умолчанию в весь код Р
https://stackoverflow.com/questions/41502721/could-someone-explain-what-compiling-in-r-is-and-why-it-would-speed-up-this-cначиная с версии R 3.4 компиляция cmpfun включена по умолчанию в весь код Р
https://stackoverflow.com/questions/41502721/could-someone-explain-what-compiling-in-r-is-and-why-it-would-speed-up-this-cЭтот пост я понимаю, что теперь вроде бы всегда компилируются пакеты, что кстати видно при обновлении пакетов , строка byte-compile and prepare package for lazy loading .
Но считаю, что пользовательский код НЕ компилируется. Загружаем функции по source и в описании source не видел, что загружаемая функция компилируется
Этот пост я понимаю, что теперь вроде бы всегда компилируются пакеты, что кстати видно при обновлении пакетов , строка byte-compile and prepare package for lazy loading .
Но считаю, что пользовательский код НЕ компилируется. Загружаем функции по source и в описании source не видел, что загружаемая функция компилируется
хмм попробую
есть вопрос: как сделать так чтобы входные переменные pat dat могли принимать как числовые вектора (как сейчас) так и строковые (string vector) ?
Первая идея сделать перегрузку - написать ещё одну функцию с тем же именем, но с другими аргументами. Никогда такого не делал в Rcpp, поэтому не знаю получится ли. Ещё, наверное, придётся делать си-код в отдельном файле и использовать sourceCpp() вместо cppFunction().