这是一个简短的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构建基于代理的模型,但是尝试使用大对象却遇到了内存问题。特别地,在初始化时创建8个3D阵列,并且在每个时间步骤中,每个3D阵列都由不同的功能填充。
目前,反导系统运行了1825天,模拟了2500个人在整个景观中移动。风景中有1000个单元格。使用此配置,我没有内存问题。
在初始化时
1个3D阵列类似于:
h <- array(NA, dim=c(1825, 48, 2500),
dimnames=list(NULL, NULL, as.character(seq(1, 2500, 1))))
## 3th dimension = individual ID
Run Code Online (Sandbox Code Playgroud)1个3D阵列类似于:
p <- array(NA, dim=c(1825, 38, 1000),
dimnames=list(NULL, NULL, as.character(seq(1, 1000, 1))))
## 3th dimension = cell ID
Run Code Online (Sandbox Code Playgroud)6个3D阵列如下:
t <- array(NA, dim=c(1825, 41, 2500),
dimnames=list(NULL, NULL, as.character(seq(1, 2500, 1))))
## 3th dimension = individual ID
Run Code Online (Sandbox Code Playgroud)数组包含字符/字符串数据类型。
理想情况下,我想增加个人数量和/或补丁数量,但是由于内存问题,这是不可能的。似乎有一些可用的工具,例如bigmemory,gc来管理内存。这些工具有效吗?我是编程的初学者,没有管理内存和高性能计算的经验。任何建议都将不胜感激,感谢您的宝贵时间。
sessionInfo()R版本3.5.3(2019-03-11)平台:x86_64-w64-mingw32 / x64(64位)运行于:Windows 7 x64(内部版本7601)Service Pack 1
如何同时删除列表中的几项?我有一个清单:
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)
列表中的最后9个项目:
[-17 -16 -15 -14 -13 -12 -11 -10 -9]
Run Code Online (Sandbox Code Playgroud)列表中的最后13个项目:
[-17 -16 -15 -14 -13]
Run Code Online (Sandbox Code Playgroud)非常感谢您的帮助。
我想通过控制聚类的大小和聚类的数量来创建栖息地聚类(例如,像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)
如何创建不重叠的群集补丁?提前致谢
我试图在每个空间网格单元应用常微分方程(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) 我试图在每个时间步读取数据并将其写入文件。
\n\n为此,我使用该包h5来存储大型数据集,但我发现使用该包的功能的代码运行缓慢。我正在处理非常大的数据集。所以,我有内存限制问题。这是一个可重现的示例:
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) 我使用函数ddply(package plyr) 来计算每组“试验”和“治疗”的响应变量的平均值。我得到这个数据框:
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\nRun Code Online (Sandbox Code Playgroud)\n\n该数据框表明,在试验 4 和治疗 B 中,没有响应变量的观察结果(因为数据框中没有指定行)。那么,当给定的响应变量没有观测值时,是否可以在数据框中自动添加一行零(使用函数 \xe2\x80\x9cddply\xe2\x80\x9d 构建)?
\n\n我想得到这个数据框:
\n\nTrial 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\nRun Code Online (Sandbox Code Playgroud)\n 我有一个包含多行的输入数据框.对于每一行,我想应用一个函数.输入数据框有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)