Я наткнулся на этот пост: http://r.789695.n4.nabble.com/speeding-up-perception-tp3640920p3646694.html от Мэтта Доула, обсуждая некоторые ранние? идеи data.table
пакета data.table
.
Он использует следующий код:
x = list(a = 1:10000, b = 1:10000)
class(x) = "newclass"
"[<-.newclass" = function(x,i,j,value) x # i.e. do nothing
tracemem(x)
x[1, 2] = 42L
В частности, я смотрю:
"[<-.newclass" = function(x,i,j,value) x
Я пытаюсь понять, что там сделано и как я могу использовать это обозначение.
Мне кажется:
- я - индекс строки
- j - индекс столбца
- значение - это значение, которое необходимо присвоить
- x - рассматриваемый объект
Поэтому я бы предпочел, чтобы я определил пользовательскую функцию для модификации места (для данного класса).
[<-.newclass
находится в модификации класса для класса newclass.
Понимание того, что происходит: Обычно следующий код должен возвращать ошибку:
x = list(a = 1:10000, b = 1:10000)
x[1, 2] = 42L
поэтому я думаю, что пример кода не имеет практического использования.
Попытка использовать логику:
Простая не-смысловая попытка заключалась бы в том, чтобы скопировать значение, которое нужно вставить:
x[i, j] <- value^2
Полная попытка:
> x = matrix(1:9, 3, 3)
> class(x) = "newclass"
> "[<-.newclass" = function(x, i, j, value) x[i, j] <- value^2 # i.e. do something
> x[1, 2] = 9
Error: C stack usage 19923536 is too close to the limit
Кажется, это не работает.
Мои вопросы):
"[<-.newclass" = function(x,i,j,value) x
Как именно эта нотация работает и как я буду ею пользоваться?
(Я добавляю тег data.table, так как связанное обсуждение касается "ссылки" на модификацию места в data.table, я думаю).