相关疑难解决方法(0)

你可以在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万
查看次数

在循环中收集未知数量的结果

如果事先不知道最终结果的数量,那么在R中循环收集结果的惯用方法是什么?这是一个玩具示例:

results = vector('integer')
i=1L
while (i < bigBigBIGNumber)  {
    if (someCondition(i)) results = c(results, i)
    i = i+1
}
results
Run Code Online (Sandbox Code Playgroud)

这个例子的问题是(我假设)它将具有二次复杂性,因为向量需要在每个附加处重新分配.(这是正确的吗?)我正在寻找一种避免这种情况的解决方案.

我发现Filter,但它需要预生成1:bigBigBIGNumber,我想避免节省内存.(问题:是否for (i in 1:N)还预生成1:N并将其保留在内存中?)

我可以制作像这样的链表:

results = list()
i=1L
while (i < bigBigBIGNumber)  {
    if (someCondition(i)) results = list(results, i)
    i = i+1
}
unlist(results)
Run Code Online (Sandbox Code Playgroud)

(请注意,这不是连接.它正在构建一个类似的结构list(list(list(1),2),3),然后展平unlist.)

有比这更好的方法吗?通常使用的惯用方法是什么?(我对R.很新.)我正在寻找有关如何解决这类问题的建议.关于紧凑(易写)和快速代码的建议是最受欢迎的!(但我想专注于快速和内存效率.)

loops r append

5
推荐指数
1
解决办法
1491
查看次数

标签 统计

r ×2

append ×1

loops ×1

oop ×1

parameter-passing ×1

pass-by-reference ×1