你能用"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) 如果事先不知道最终结果的数量,那么在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.很新.)我正在寻找有关如何解决这类问题的建议.关于紧凑(易写)和快速代码的建议是最受欢迎的!(但我想专注于快速和内存效率.)