小编jay*_*ayb的帖子

R:矢量化循环以创建成对矩阵

我想加速一个用于创建成对矩阵的函数,该矩阵描述在一组位置中在所有其他对象之前和之后选择对象的次数。

这是一个例子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)

在每一个中ShopFruit都是由一个给定的客户挑选的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)

performance loops r matrix vectorization

15
推荐指数
3
解决办法
620
查看次数

R:在对象生成器中使用主动绑定有条件地将新类添加到 R6 对象

我有一个简单的 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)

但是,我希望这发生在对象内。有没有办法将其作为活动绑定包含在对象生成器中,以便从它创建的任何对象都将内置此功能?

注意。优选地,将阈值类别添加到对象中;它不会取代现有的类。

oop inheritance r r6

4
推荐指数
1
解决办法
514
查看次数

标签 统计

r ×2

inheritance ×1

loops ×1

matrix ×1

oop ×1

performance ×1

r6 ×1

vectorization ×1