小编akr*_*ica的帖子

如何使用 saveRDS(..., refhook = ) 参数?

我有一个复杂的列表对象,一个建模函数 (asreml) 的输出。该对象包含各种数据类型,包括附加了环境的函数和公式。我不想将环境保存到 RDS,因为它们非常大而且我保存了很多模型。

refhook=serializesaveRDS函数中遇到了参数。文档说:

refhook 函数可用于自定义非系统引用对象(所有外部指针和弱引用,以及命名空间和包环境以及 .GlobalEnv 以外的所有环境)的处理。serialize 的钩子函数应该为它要处理的引用返回一个字符向量;否则它应该返回NULL。

鉴于此示例模型

e <- new.env()
e$a = rnorm(10)
l <- list(a = e, b = 42)
Run Code Online (Sandbox Code Playgroud)

refhook 函数确实显示了一些效果。当我定义一个返回字符的函数时,输出变小,表明环境没有得到保存:

length(serialize(l, connection = NULL))
[1] 338

s <- serialize(l, 
  connection = NULL, 
  refhook = function(x) "")
length(s)
[1] 109
Run Code Online (Sandbox Code Playgroud)

但是,我无法读取结果对象:

unserialize(s)

Error in unserialize(s) : 
  no restore method available
Run Code Online (Sandbox Code Playgroud)

我还尝试了原始向量输出,怀疑 refhook 可能会提供替代的序列化输出,但这不起作用:

s2 <- serialize(l,
  connection = NULL, 
  refhook = function(x) 
    serialize("env", connection = NULL)))

Error in …
Run Code Online (Sandbox Code Playgroud)

serialization r

9
推荐指数
1
解决办法
873
查看次数

创建ICC颜色配置文件以模拟色盲人员的视力

我会发现它是模拟色盲人士视觉的有用工具,例如我准备演示时.我可以用来xcalib为我的显示器分配一个特定的ICC配置文件.

但是,我找不到为此任务创建的配置文件.

http://daltonize.org上,我发现必须指定"CIE chromaticy corrdinates"(见下文).

我找到了SampleICC程序,它可能用于此任务.

是否可以单独将CIE Chromaticy坐标转换为颜色配置文件或需要更多输入?有没有人曾使用过SampleICC并且知道如何将CIE corrdinates转换为合适的输入?

每种类型的色觉缺陷的CIE色度坐标(x/y)如下:

Protanopia (0.7465, 0.2535)
Deuteranopia (1.4, -0.4)
Tritanopia (0.1748, 0.0)
Run Code Online (Sandbox Code Playgroud)

(带有CIE色度坐标的色域的Protamopia)

下面我列出了我认为可能适合的几个SampleICC程序的帮助输出.


create_display_profile

用法是:create_display_profile input_file N description copyright output_file where

IN.txt是一个文件,其内容是:

  • 测量红色XYZ初级(浮子的三重态)
  • 测量绿色XYZ初级(浮子的三重态)
  • 测量蓝色XYZ初级(浮子的三重态)
  • 测量中黑色XYZ(浮子的三重态)
  • 测量中等白色XYZ(浮子的三重态)
  • N行是红色(浮点数)的色调曲线
  • N行是绿色(浮点数)的色调曲线
  • N行是蓝色(浮点数)的色调曲线

    N是每个色调曲线的采样点数,

    description是一个字符串,用于标识配置文件,

    copyright是标识配置文件内容所有者的字符串,以及

    output_file是包含创建的监视器配置文件的文件

示例: create_display_profile matrix_trc_input.txt 42"我的TRC/Matrix配置文件""Copyright(c)2007 My Little Company - 保留所有权利"matrix_trc.icc


create_CLUT_profile

用法: create_CLUT_profile [OPTION] ...描述MEDIA_WHITE SIZE IN_FILE OUT_FILE

例子:

create_CLUT_profile"sample profile""0.21 0.24 0.52"11 /tmp/in.txt /tmp/out.icc

create_CLUT_profile -f"0.01 …

color-management color-profile color-blindness

8
推荐指数
0
解决办法
1152
查看次数

如何手动将视口比例固定的视口放入其父视口,以免浪费空间,如ggplot一样?

我有一个视口,该视口必须具有固定的宽高比,因为它的原始坐标系中的x和y单位之间必须具有相等的距离。

我想将此视口装配到父视口中,以便将其最大程度地缩放,但保持其宽高比。

使用网格单元“ snpc”,尽管我无法达到最大程度,但我仍然可以保持宽高比。请参阅下面的代码,该代码以四种不同的设备纵横比打印出到目前为止已归档的内容。

绘制四种不同的输出设备宽度

当设备的宽度较小时,感兴趣的视口(灰色并带有网格的视口)会填充可用的最大区域,但如果设备的宽度变得太大而导致设备的高度成为视口大小的限制因素,则该方法将失败。视口无法覆盖整个可能的高度。我希望感兴趣的视口在最右边的图中覆盖整个设备的高度。

编辑:我发现ggplot可以做到这一点,并更新了我的示例来显示这一点。请注意ggplot如何触摸最右边图像中的设备上下边界以及最左边图像中的左右边界,为什么我自己制作的解决方案即使在有空格的情况下也不会触摸最右边图像中的设备上下边界。但是,我不能使用ggplot,因为我想包括一个仅使用网格构建的自定义图形,但该图形依赖于本机x和y坐标系上的相等距离​​。

ggplot以四种不同的输出设备宽度输出

# -- Helper functions ------------------------------------------------------

# Draw something (inside fun) for different paper sizes
forDifferentSizes <- function(names, width, height, fun, ...){
  cyc <- function(x, along) rep_len(x, length(along))
  mapply( names, cyc(width, names), cyc(height, names)
        , FUN = function(n, w, h){
            png(paste0(n,'.png'), width = w, height = h, ...)
            on.exit(dev.off())
            fun(n, w, h)
        })
}

# -- Own attempt -----------------------------------------------------------
library(grid)

# Coordinate system
x <- c(1,6)
y <- c(1,4)
range <- c(diff(x), diff(y))
dims …
Run Code Online (Sandbox Code Playgroud)

plot r ggplot2 r-grid

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

为什么我的 slurm 作业步骤没有并行启动?

我试图弄清楚“任务”的概念在 SLURM 中意味着什么。我在 SO 上找到了这个答案,它建议我使用以下作业脚本:

#!/bin/bash

#SBATCH --ntasks=2

srun --ntasks=1 sleep 10 & 
srun --ntasks=1 sleep 12 &
wait
Run Code Online (Sandbox Code Playgroud)

作者说这项工作总共需要 12 秒才能运行,因为这两个步骤sleep 10sleep 12并行运行的,但我无法重现这一点。

如果我将上述文件另存为slurm-test并运行

sbatch -o slurm.out slurm-test,
Run Code Online (Sandbox Code Playgroud)

我看到我的作业运行了 23 秒。

这是以下的输出sacct --format=JobID,Start,End,Elapsed,NCPUS -S now-2minutes

       JobID               Start                 End    Elapsed      NCPUS
------------ ------------------- ------------------- ---------- ----------
645514       2021-06-30T11:05:38 2021-06-30T11:06:00   00:00:22          2
645514.batch 2021-06-30T11:05:38 2021-06-30T11:06:00   00:00:22          2
645514.exte+ 2021-06-30T11:05:38 2021-06-30T11:06:00   00:00:22          2
645514.0     2021-06-30T11:05:38 2021-06-30T11:05:48   00:00:10          2
645514.1     2021-06-30T11:05:48 2021-06-30T11:06:00   00:00:12 …
Run Code Online (Sandbox Code Playgroud)

slurm

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

如何更改奇点容器中的默认提示

我正在创建一个 Singularity 图像,并且想要一个自定义的 bash 提示符,就像我可以通过PS1在我的~/.bash_profile.

但是,不幸的是,Singularity 做了一些事情来强制执行自己的提示,如下所示:Singularity>。这不是一个很有帮助的提示。

我尝试在定义文件中设置 PS1,如下例所示:

# File prompt-test1.def
Bootstrap: shub
From: alpine:latest
%environment
export PS1="[my-container]\w\$ "
Run Code Online (Sandbox Code Playgroud)

我构建并运行了该图像,但无济于事:

sudo singularity build prompt-test.sif prompt-test.def
singularity shell prompt-test.sif
# shows Singularity>
Run Code Online (Sandbox Code Playgroud)

使用envshell 中的命令,我注意到已PROMPT_COMMAND设置:

echo $PROMPT_COMMAND
# PS1="Singularity> "; unset PROMPT_COMMAND
Run Code Online (Sandbox Code Playgroud)

...所以我试图改变这一点:

# File prompt-test2.def
Bootstrap: shub
From: alpine:latest
%environment
export PROMPT_COMMAND='PS1="[my-container]\w\$ "; unset PROMPT_COMMAND'
Run Code Online (Sandbox Code Playgroud)

...但提示保持不变!但现在,PROMPT_COMMAND容器内部看起来像

echo $PROMPT_COMMAND
# PS1="[my-container]\w\$ "; unset PROMPT_COMMAND; PROMPT_COMMAND="${PROMPT_COMMAND%%; PROMPT_COMMAND=*}";PS1="Singularity> "
Run Code Online (Sandbox Code Playgroud)

编辑以替换为更好的信息/.singularity.d/env …

shell command-prompt singularity-container

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

如何按除某些变量之外的所有变量进行分组,并为每个观察值添加一个组 ID

我有一个这样的数据集:

data(CO2, package = 'datasets')

##    Plant        Type  Treatment conc uptake
## 1    Qn1      Quebec nonchilled   95   16.0
## 2    Qn1      Quebec nonchilled  175   30.4
## ... 
## 17   Qn3      Quebec nonchilled  250   40.3
## 18   Qn3      Quebec nonchilled  350   42.1
## ...
## 27   Qc1      Quebec    chilled  675   35.4
## 28   Qc1      Quebec    chilled 1000   38.7
## ...
## 36   Qc3      Quebec    chilled   95   15.1
## 37   Qc3      Quebec    chilled  175   21.0
## ...
## 47   Mn1 Mississippi nonchilled …
Run Code Online (Sandbox Code Playgroud)

r dplyr

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

JavaScript body.style.background 无法在 script.js 中使用线性渐变,但在控制台中工作正常

body.style.background = 无法在 script.js 包含的文件中工作,其他一切都可以工作,兑现的 dom 选择器可以工作,输入 body.style.background = 'red'; 有效,但不在包含文件中

我已经尝试过console.logs,如下面的代码中所述,输出的奇特之处是,如果我从回调中复制日志并将其粘贴到body.style.background中,它可以工作,但不能在脚本文件中。

color_1 = document.querySelector("#color-1");
color_2 = document.querySelector("#color-2");
body = document.querySelector("body");

function changeBackgroundColor() {
    body.style.background = "linear-gradient(to right, "+color_1.value+ ", "+ color_2.value+");";

//************* I am getting the console.logs but the background's not changing

    console.log("linear-gradient(to right, " + color_1.value + ", " + color_2.value + ");");
}

//************* Both the listeners work fine and the cashed selectors

color_1.addEventListener("input", changeBackgroundColor);
color_2.addEventListener("input", changeBackgroundColor);
Run Code Online (Sandbox Code Playgroud)
<html>
  <head>
      <title>Background Color Generator</title>

      <!-- Custom Styles -->
      <style …
Run Code Online (Sandbox Code Playgroud)

javascript dom background linear-gradients

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