【发布时间】:2018-08-09 14:34:03
【问题描述】:
我看到了这个帖子:来自 Matt Dowle 的 http://r.789695.n4.nabble.com/speeding-up-perception-tp3640920p3646694.html,提前讨论了一些? 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
我试图了解那里做了什么以及如何使用这个符号。
在我看来是这样的:
- i 是行索引
- j 是列索引
- value 是要赋值的值
- 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 中的“按引用”修改,我认为)。
【问题讨论】:
标签: r data.table