我想加速一个用于创建成对矩阵的函数,该矩阵描述在一组位置中在所有其他对象之前和之后选择对象的次数。
这是一个例子df
:
df <- data.frame(Shop = c("A","A","A","B","B","C","C","D","D","D","E","E","E"),
Fruit = c("apple", "orange", "pear",
"orange", "pear",
"pear", "apple",
"pear", "apple", "orange",
"pear", "apple", "orange"),
Order = c(1, 2, 3,
1, 2,
1, 2,
1, 2, 3,
1, 1, 1))
Run Code Online (Sandbox Code Playgroud)
在每一个中Shop
,Fruit
都是由一个给定的客户挑选的Order
。
以下函数创建一个m x n
成对矩阵:
loop.function <- function(df){
fruits <- unique(df$Fruit)
nt <- length(fruits)
mat <- array(dim=c(nt,nt))
for(m in 1:nt){
for(n in 1:nt){
## filter df for each pair of fruit
xm <- df[df$Fruit …
Run Code Online (Sandbox Code Playgroud) 我有一个简单的 R6 对象生成器:
thing <- R6Class("youngThing",
private = list(
..age = 0),
active = list(
age = function(){
private$..age <- private$..age + 1
private$..age
}
)
)
Run Code Online (Sandbox Code Playgroud)
这给了我一个简单的 R6 对象,..age
每次age
调用活动字段时它都会增加 1:
a_thing <- thing$new()
a_thing$age
# [1] 1
Run Code Online (Sandbox Code Playgroud)
我希望 a_thing 的对象类在给定私有字段的阈值的情况下进行更改..age
,如下所示:
class(a_thing)
# [1] "youngThing" "R6"
for(timestep in 1:10){
if(a_thing$age >5 & ! inherits(a_thing, "olderThing")){
class(a_thing) <- c("olderThing", class(a_thing))
}
}
class(a_thing)
# [1] "olderThing" "youngThing" "R6"
Run Code Online (Sandbox Code Playgroud)
但是,我希望这发生在对象内。有没有办法将其作为活动绑定包含在对象生成器中,以便从它创建的任何对象都将内置此功能?
注意。优选地,将阈值类别添加到对象中;它不会取代现有的类。