Size: a a a

R (язык программирования)

2021 May 07

ДВ

Дмитрий Володин... in R (язык программирования)
Вот да, хотел добавить, что я тоже в итоге влетел, потому что нифига не смогу отключить вовремя)
источник

AS

Alexander Semenov in R (язык программирования)
источник

M

Max in R (язык программирования)
library("Rcpp")

cycle <- cppFunction('
#include <Rcpp.h>
using namespace Rcpp;

// [[Rcpp::export]]
List fun(NumericVector S) {
 R_xlen_t n = S.size();

 // Note subsets are 0 indexed, so add -1 to indices
 for(R_xlen_t i = 2; i < n; i++) {
 S[i] = S[i-1] + S[i-2];
 }
 return DataFrame::create(Named("S") = S);
}
')

func_r <- function(len) {
 S <- rep(0, len)
 S[1] <- 0
 S[2] <- 1
 for (i in 3:length(S)) {
   S[i] <- S[i-1] + S[i-2]
 }
 return(S)
}

func_c <- function(len) {
 S <- rep(0, len)
 S[1] <- 0
 S[2] <- 1
 
 S <- cycle(S)[,1]
 return(S)
}

S1 <- func_r(10000)
S2 <- func_c(10000)

all(S1==S2)

microbenchmark::microbenchmark(func_r(100000), func_c(100000), times = 100)
источник

ДВ

Дмитрий Володин... in R (язык программирования)
Кажется, что сам дурак. Но скорее всего мелкомягкие с таких дураков норм поимели))
источник

M

Max in R (язык программирования)
источник

DK

Dm Kb in R (язык программирования)
это функция на Р, можно исходники всегда посмотреть
источник

M

Max in R (язык программирования)
собственно вот, что у меня вышло. Ускорение в 15 раз
источник

IS

Ilya Shutov in R (язык программирования)
о всех. это принципиальный момент. векторизация или ручное поэлементное управление
источник

AS

Alexander Semenov in R (язык программирования)
Я там с индусиком из техподдержки какую-то часть денег, вроде, вернул, но до конца дело не довёл и в итоге сколько-то они с меня всё же поимели.
источник

ДВ

Дмитрий Володин... in R (язык программирования)
А, да? Я был уверен, что это какой-то примитив или ещё что-то типа того
источник

M

Max in R (язык программирования)
.
источник

h

helby in R (язык программирования)
Это я от Карпова услышал такое))
источник

ДВ

Дмитрий Володин... in R (язык программирования)
Но вообще *apply - очень хорошие функции. И их расширения в пакете purrr. Шаблон lapply(list, function(x) some_magic) %>% do.call(rbind, .) - один из любимых)
источник

ДВ

Дмитрий Володин... in R (язык программирования)
А ещё у них есть аналоги типа parLapply для распаралеливания вычислений. Но я советую хорошенько подумать, прежде чем распаралеливать код. Иногда это может его замедлить даже в итоге. Или вы просто выйдете за пределы памяти
источник

AS

Alexander Semenov in R (язык программирования)
Год назад я ещё шутил о том, что когда-нибудь узнаю, что делает do.call, но сейчас уже больше не буду. Вероятность этого с годами асимптотически приближается к нулю.
источник

ДВ

Дмитрий Володин... in R (язык программирования)
в моём примере эту схему можно заменить одним map_df))
источник

AS

Alexander Semenov in R (язык программирования)
Ну вот да, sapply из "горячих" кусков моего кода я на него уже заменил. В будущем надо как-то поплотнее с purrr поработать, раз уж с apply не задалось.
источник

ДВ

Дмитрий Володин... in R (язык программирования)
Из всего tidyverse - этот пакет самый любимый))
источник

ДВ

Дмитрий Володин... in R (язык программирования)
Особенно nested dataframes))
источник

AS

Alexander Semenov in R (язык программирования)
Да, недавно эта конструкция изрядно жизнь облегчила. Но раз не могу вспомнить кейс, значит пока ещё для меня это ближе к эзотерике.
источник