我正在使用一些带有snakemake的python脚本来自动化工作流程。这些脚本接受命令行参数,虽然我可以用snakemake.input[0]、snakemake.output[0]等替换它们,但我不愿意这样做,因为我也希望能够在 Snakemake 之外使用它们。
解决这个问题的一种自然方法(我一直在做的)是将它们作为 ashell而不是script. 然而,当我这样做时,依赖图就被破坏了;我更新了脚本,DAG 认为不需要重新运行任何内容。
有没有办法将命令行参数传递给脚本但仍将它们作为脚本运行?
编辑:一个例子
我的Python脚本
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("-o", type=str)
args = parser.parse_args()
with open(args.o, "w") as file:
file.write("My file output")
Run Code Online (Sandbox Code Playgroud)
我的蛇形档案
rule some_rule:
output: "some_file_name.txt"
shell: "python my_script.py -o {output}"
Run Code Online (Sandbox Code Playgroud) 我有一个数据集,x代表一年中的某一天(比如生日),我想创建一个密度图.此外,由于我有一些分组信息(比如男孩或女孩),我想使用ggplot2制作密度图的功能.
起初很容易:
require(ggplot2); require(dplyr)
bdays <- data.frame(gender = sample(c('M', 'F'), 100, replace = T), bday = sample(1:365, 100, replace = T))
bdays %>% ggplot(aes(x = bday)) + geom_density(aes(color = factor(gender)))
Run Code Online (Sandbox Code Playgroud)
然而,由于边缘效应,这给出了很差的估计.我想应用这样一个事实:我可以使用圆形坐标,使得365 + 1 = 1 - 12月31日之后的一天是1月1日.我知道该circular软件包提供了此功能,但我没有使用stat_function()调用实现它的任何成功.它对我来说特别有用,ggplot2因为我希望能够使用方面,aes调用等.
此外,为了澄清,我想看起来像geom_density- 我不是在寻找像下图所示的极坐标图:使用ggplot2的圆形密度图.
我有兴趣从互联网上的某个位置下载年度数据。我有一个GetYearData.py执行此操作的 python 脚本,将年份和输出文件名作为命令行参数。我想一次在几年的数据上运行这个脚本;我想使用 Make,这样如果我更改开始或结束年份,我就不必重新下载所有数据。
我可以用一个非常简单的 Makefile 做一年:
data/YearData_2000.txt : GetYearData.py
python $< --year 2000 --outfile $@
Run Code Online (Sandbox Code Playgroud)
但是,我想这样做一个循环(或类似的构造),以便在 bash 中的序列中的每一年YEARS=($(seq $(SYEAR) 1 $(EYEAR)))- 我传递--year $(Y)给我的脚本并为--outfile?