Учитывая, что у вас проблемы с памятью, возможно, отключение. Первое может помочь.Во-первых, избавьтесь от посторонних идентификаторов.
A <- A[A$id %in% B$id,]
Сокращение набора данных A все еще требует захвата большего объема памяти.Это невозможно без сохранения некоторых переменных.Тем не менее, мы можем избавиться от всего этого, я надеюсь, отсекая каждую дату ниже нашего абсолютного минимума и выше нашего абсолютного максимума.
A <- A[A$date > (min(B$date) - 10) & A$date <= max(B$date),]
Конечно, не квалифицируя это по идентификатору, который у нас есть.Получите наименьшую возможную версию A, но, надеюсь, она станет еще меньше.
Теперь запустите код, который я впервые предложил, и посмотрите, есть ли у вас ошибка памяти
B$idDate <- factor(B$id):factor(B$date)
B$past10 <- sapply(B$idDate, function(x){with(B[B$idDate == x,],
prod(1+A$ret[A$id == id & A$date > date-10 & A$date < date])-1)})