小编Nel*_*ell的帖子

使用特定值顺序对数据表进行排序

这是一个简短的data.table:

DT <- data.table(Tag1 = c(22,253,6219,6219,252862,252864,312786,312812),
                 Tag2 = c(22,255,6220,252857,252863,252865,251191,252863),
                 Date= as.Date(as.character(c("7/25/2008","6/15/2000","6/30/2000","9/6/2002","9/6/2002","9/6/2002","9/3/2003","9/5/2003")),format = "%m/%d/%Y"))
DT

     Tag1   Tag2       Date
1:     22     22 2008-07-25
2:    253    255 2000-06-15
3:   6219   6220 2000-06-30
4:   6219 252857 2002-09-06
5: 252862 252863 2002-09-06
6: 252864 252865 2002-09-06
7: 312786 251191 2003-09-03
8: 312812 252863 2003-09-05
Run Code Online (Sandbox Code Playgroud)

我想按3列升序对data.table进行排序:Tag1,Tag2和Date.我测试过:

> test <- DT[order(Tag1, Tag2, Date)]
> test
     Tag1   Tag2       Date
1:     22     22 2008-07-25
2:    253    255 2000-06-15
3:   6219   6220 2000-06-30
4:   6219 252857 2002-09-06
5: 252862 252863 …
Run Code Online (Sandbox Code Playgroud)

r data.table

13
推荐指数
1
解决办法
4048
查看次数

如何使用R在基于代理的建模中管理内存

我正在用R构建基于代理的模型,但是尝试使用大对象却遇到了内存问题。特别地,在初始化时创建8个3D阵列,并且在每个时间步骤中,每个3D阵列都由不同的功能填充。

目前,反导系统运行了1825天,模拟了2500个人在整个景观中移动。风景中有1000个单元格。使用此配置,我没有内存问题。

在初始化时

数组包含字符/字符串数据类型。

理想情况下,我想增加个人数量和/或补丁数量,但是由于内存问题,这是不可能的。似乎有一些可用的工具,例如bigmemory,gc来管理内存。这些工具有效吗?我是编程的初学者,没有管理内存和高性能计算的经验。任何建议都将不胜感激,感谢您的宝贵时间。

sessionInfo()R版本3.5.3(2019-03-11)平台:x86_64-w64-mingw32 / x64(64位)运行于:Windows 7 x64(内部版本7601)Service Pack 1

memory r agent-based-modeling

10
推荐指数
1
解决办法
270
查看次数

如何同时删除列表中的多个项目

如何同时删除列表中的几项?我有一个清单:

let list1 map [ -1 * ? ] reverse (n-values ( ( max-pxcor -  round (max-pxcor / 3) ) + 1 ) [?]) 
print list1
[-17 -16 -15 -14 -13 -12 -11 -10 -9 -8 -7 -6 -5 -4 -3 -2 -1 0]
Run Code Online (Sandbox Code Playgroud)

例如,我要删除:-列表中的最后4个项目:

[-17 -16 -15 -14 -13 -12 -11 -10 -9 -8 -7 -6 -5 -4]
Run Code Online (Sandbox Code Playgroud)

非常感谢您的帮助。

netlogo

6
推荐指数
1
解决办法
530
查看次数

如何创建不重叠的群集修补程序

我想通过控制聚类的大小和聚类的数量来创建栖息地聚类(例如,像Marine的主题中的森林补丁:在景观中添加补丁聚类)?例如,我使用了"植物迁移"代码:

 to create-forests
 ask n-of forest-number patches
[
 set pcolor green 
]
ask patches with [pcolor = green]
[
 let a self
 let b max list 1 round(random-normal mean-forest-area (mean-forest-area * coef-forest-area))
 ask patches with [distance a <= b]
 [ 
   set pcolor green ]
 ]
end
Run Code Online (Sandbox Code Playgroud)

如何创建不重叠的群集补丁?提前致谢

netlogo

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

常微分方程(ODEs) - 有没有办法防止负值?

我试图在每个空间网格单元应用常微分方程(ODE)系统.因此,每个景观单元具有相关的ODE模型.在每个时间步骤更新易感蚊子(Sv),暴露的蚊子(Se)和受感染的蚊子(St)的数量,并且ODE模型与基于离散剂的动物运动模型耦合.以下是运行ODE模型的示例:

library(deSolve)

mod1 <- function(out_tab, time_step, var){
 Sv <- out_tab[time_step,c("Sv")]
  Ev <- out_tab[time_step,c("Ev")]
  Iv <- out_tab[time_step,c("Iv")]

  Nh <- out_tab[time_step,c("Nh")]
  Ih <- out_tab[time_step,c("Ih")]
  bv <- 100
  dv <- 0.07
  betav <- 0.33
  av <- 0.5
  muv <- 0.1

  mod <- function(times, states, parameters) {
    with(as.list(c(states, parameters)), {

      dSv <- bv - dv*Sv - betav*av*(Ih/Nh)*Sv
      dEv <- betav*av*(Ih/Nh)*Sv - dv*Ev - muv*Ev
      dIv <- muv*Ev - dv*Iv

      return(list(c(dSv, dEv, dIv)))

    })
  }

  states <- c(Sv = …
Run Code Online (Sandbox Code Playgroud)

r ode differential-equations

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

使用 R 通过循环读取数据并将数据写入文件的有效方法

我试图在每个时间步读取数据并将其写入文件。

\n\n

为此,我使用该包h5来存储大型数据集,但我发现使用该包的功能的代码运行缓慢。我正在处理非常大的数据集。所以,我有内存限制问题。这是一个可重现的示例:

\n\n
library(ff)\nlibrary(h5)\nset.seed(12345)\nfor(t in 1:3650){\n\n  print(t)\n\n  ## Initialize the matrix to fill\n  mat_to_fill <- ff(-999, dim=c(7200000, 48), dimnames=list(NULL, paste0("P", as.character(seq(1, 48, 1)))), vmode="double", overwrite = T) \n  ## print(mat_to_fill)\n  ## summary(mat_to_fill[,])\n\n  ## Create the output file\n  f_t <- h5file(paste0("file",t,".h5"))\n\n  ## Retrieve the matrix at t - 1 if t > 1\n  if(t > 1){\n    f_t_1 <- h5file(paste0("file", t - 1,".h5"))\n    mat_t_1 <- f_t_1["testmat"][] ## *********** ##\n    ## f_t_1["testmat"][]\n\n  } else {\n\n    mat_t_1 <- 0\n\n  }\n\n  ## …
Run Code Online (Sandbox Code Playgroud)

performance r sparkr

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

如果没有观察结果,请在使用 ddply 创建的数据框中添加一行零

我使用函数ddply(package plyr) 来计算每组“试验”和“治疗”的响应变量的平均值。我得到这个数据框:

\n\n
Trial   Treatment   N   Mean\n1           A      458  125.258\n1           B      459  168.748\n2           A      742  214.266\n2           B      142  475.786\n3           A      247  145.689\n3           B      968  234.129\n4           A      436  456.287\n
Run Code Online (Sandbox Code Playgroud)\n\n

该数据框表明,在试验 4 和治疗 B 中,没有响应变量的观察结果(因为数据框中没有指定行)。那么,当给定的响应变量没有观测值时,是否可以在数据框中自动添加一行零(使用函数 \xe2\x80\x9cddply\xe2\x80\x9d 构建)?

\n\n

我想得到这个数据框:

\n\n
Trial   Treatment   N   Mean\n1           A      458  125.258\n1           B      459  168.748\n2           A      742  214.266\n2           B      142  475.786\n3           A      247  145.689\n3           B      968  234.129\n4           A      436  456.287\n4           B       0   0\n
Run Code Online (Sandbox Code Playgroud)\n

r plyr

2
推荐指数
1
解决办法
1801
查看次数

将函数应用于矩阵的每一行,而不使用R中的lapply函数

我有一个包含多行的输入数据框.对于每一行,我想应用一个函数.输入数据框有1,000,000多行.如何使用加速零件加速lapply ?我想避免应用函数系列,因为有效的方法将函数应用于数据帧的每一行并返回数据帧列表,因为这些方法似乎在我的情况下很慢.

这是一个具有简单功能的可重现示例:

library(tictoc)   # enable use of tic() and toc() to record time taken for test to compute

func <- function(coord, a, b, c){

  X1 <- as.vector(coord[1])
  Y1 <- as.vector(coord[2])
  X2 <- as.vector(coord[3])
  Y2 <- as.vector(coord[4])

  if(c == 0) {

    res1 <- mean(c((X1 - a) : (X1 - 1), (Y1 + 1) : (Y1 + 40)))
    res2 <- mean(c((X2 - a) : (X2 - 1), (Y2 + 1) : (Y2 + 40)))
    res <- matrix(c(res1, res2), …
Run Code Online (Sandbox Code Playgroud)

r lapply

0
推荐指数
1
解决办法
399
查看次数