相关疑难解决方法(0)

如何在data.table中按引用删除行?

我的问题与引用分配和复制分配有关data.table.我想知道是否可以通过引用删除行,类似于

DT[ , someCol := NULL]
Run Code Online (Sandbox Code Playgroud)

我想知道

DT[someRow := NULL, ]
Run Code Online (Sandbox Code Playgroud)

我想有一个很好的理由说明为什么这个功能不存在,所以也许你可以指出一个很好的替代通常的复制方法,如下所示.特别是,从我的例子(data.table)开始,

DT = data.table(x = rep(c("a", "b", "c"), each = 3), y = c(1, 3, 6), v = 1:9)
#      x y v
# [1,] a 1 1
# [2,] a 3 2
# [3,] a 6 3
# [4,] b 1 4
# [5,] b 3 5
# [6,] b 6 6
# [7,] c 1 7
# [8,] c 3 8
# [9,] c 6 …
Run Code Online (Sandbox Code Playgroud)

r data.table

144
推荐指数
5
解决办法
5万
查看次数

R中的copy-on-modify语义到底是什么,以及规范源在哪里?

每隔一段时间我就会遇到R具有复制修改语义的概念,例如在Hadley的devtools wiki中.

大多数R对象具有复制修改语义,因此修改函数参数不会更改原始值

我可以将这个术语追溯到R-Help邮件列表.例如,Peter Dalgaard在20037月写道:

R是一种函数式语言,具有惰性求值和弱动态类型(变量可以随意更改类型:a < - 1; a < - "a"是允许的).从语义上讲,一切都是复制修改,尽管在实现中使用了一些优化技巧来避免最严重的低效率.

同样,Peter Dalgaard在20041月写道:

R具有复制修改语义(原则上,有时在实践中),因此一旦对象的一部分发生变化,您可能必须在新的位置查找包含它的任何内容,包括可能的对象本身.

更进一步,20002月, Ross Ihaka说:

我们付出了相当多的努力来实现这一目标.我会将语义描述为"复制修改(如有必要)".仅在修改对象时才进行复制.(如果需要)部分意味着如果我们可以证明修改不能改变任何非局部变量,那么我们就可以继续修改而不需要复制.

它不在手册中

无论我搜索多么努力,我都无法在R手册中找到"复制修改"的参考,无论是在R语言定义还是在R Internals中

我的问题有两个部分:

  1. 这在哪里正式记录?
  2. 复制修改如何工作?

例如,谈论"传递引用"是否合适,因为承诺传递给函数?

r pass-by-reference pass-by-value

71
推荐指数
2
解决办法
6008
查看次数

你可以在R中传递参考吗?

你能用"R"通过参考吗?例如,在以下代码中:

setClass("MyClass",
    representation(
    name="character"
    ))


instance1 <-new("MyClass",name="Hello1")
instance2 <-new("MyClass",name="Hello2")

array = c(instance1,instance2)

instance1
array

instance1@name="World!"

instance1
array
Run Code Online (Sandbox Code Playgroud)

输出是

> instance1
An object of class “MyClass”
Slot "name":
[1] "World!"

> array
[[1]]
An object of class “MyClass”
Slot "name":
[1] "Hello1"


[[2]]
An object of class “MyClass”
Slot "name":
[1] "Hello2"
Run Code Online (Sandbox Code Playgroud)

但我希望如此

> instance1
An object of class “MyClass”
Slot "name":
[1] "World!"

> array
[[1]]
An object of class “MyClass”
Slot "name":
[1] "World!"


[[2]]
An object of class …
Run Code Online (Sandbox Code Playgroud)

oop r parameter-passing pass-by-reference

66
推荐指数
5
解决办法
5万
查看次数