小编msc*_*lli的帖子

R +情节:革命的坚实

我有一个功能r(x),我想围绕x轴旋转,以获得我想要使用(着色)添加到现有绘图的旋转实体.plot_lyadd_surfacex

这是一个例子:

library(dplyr)
library(plotly)

# radius depends on x
r <- function(x) x^2

# interval of interest
int <- c(1, 3)

# number of points along the x-axis
nx <- 20

# number of points along the rotation
ntheta <- 36

# set x points and get corresponding radii
coords <- data_frame(x = seq(int[1], int[2], length.out = nx), r = r(x))

# for each x: rotate r to get y and …
Run Code Online (Sandbox Code Playgroud)

r surface plotly r-plotly

18
推荐指数
4
解决办法
581
查看次数

如何在交互式会话中读取knitr/Rmd缓存?

我有一个Rmd包含大量缓存代码块的文件.

现在,我想继续使用交互式会话开发该脚本,以便在将最终代码放入文档的新块之前进行游戏并测试不同的解决方案.

使用普通R脚本,我可以直接使用它来使我的交互式会话与脚本的最后一行相同.但是,这将导致(重新)执行交互式会话中的所有代码.

我想将我的Rmd文件读入一个交互式会话,忽略Markdown部分并利用现有的knitr缓存,理想情况下不创建任何输出.

我怎样才能做到这一点?

PS:我不是在寻找一些特定于IDE的方法来设置它,但是我可以在任何终端模拟器中从一个简单的R会话中运行命令.

r knitr r-markdown

14
推荐指数
3
解决办法
1560
查看次数

根据给定列中的公共值,在R中聚合相同data.frame的多行

我有一个data.frame看起来像这样:

# set example data
df <- read.table(textConnection("item\tsize\tweight\tvalue
A\t2\t3\t4
A\t2\t3\t6
B\t1\t2\t3
C\t3\t2\t1
B\t1\t2\t4
B\t1\t2\t2"), header = TRUE)

# print example data
df
Run Code Online (Sandbox Code Playgroud)
  item size weight value
1    A    2      3     4
2    A    2      3     6
3    B    1      2     3
4    C    3      2     1
5    B    1      2     4
6    B    1      2     2
Run Code Online (Sandbox Code Playgroud)

正如您所看到的那样size,weight并列不会增加任何复杂性,因为它们对于每个都是相同的item.但是,value同样可以有多个item.

我想将data.frame折叠为每次item使用均值一行value:

  item size weight value
1    A …
Run Code Online (Sandbox Code Playgroud)

aggregate r dataframe

12
推荐指数
2
解决办法
2万
查看次数

sed/awk:从文本流中提取模式

2011-07-01 ... /home/todd/logs/server_log_1.log ...
2011-07-02 ... /home/todd/logs/server_log_2.log ...
2011-07-03 ... /home/todd/logs/server_log_3.log ...
Run Code Online (Sandbox Code Playgroud)

我有一个文件看起来像上面.我想从中提取文件名并输出到STDOUT:

server_log_1.log
server_log_2.log
server_log_3.log
Run Code Online (Sandbox Code Playgroud)

有人可以帮忙吗?谢谢!

文件名模式是server_log_xxx.log,它只在一行中出现一次.

bash awk grep sed

10
推荐指数
2
解决办法
3万
查看次数

使用R和ggplot2在一个x位置绘制两个箱线图

我想在R使用上方/下方绘制多个箱图,而不是彼此相邻ggplot2.这是一个例子:

library("ggplot2")
set.seed(1)
plot_data<-data.frame(loc=c(rep(1,200),rep(2,100)),
                      value=c(rnorm(100,3,.5),rnorm(100,1,.25),2*runif(100)),
                      class=c(rep("A",100),rep("B",100),rep("C",100)))
ggplot(plot_data,aes(x=loc,y=value,group=class)) +
       geom_boxplot(fill=c("red","green","blue"))
Run Code Online (Sandbox Code Playgroud)

这导致以下情节:

示例情节

如您所见,蓝色框图以其loc值(2.0)为中心,而红色和绿色仅具有宽度的一半,并且绘制在其共享loc值(1.0)的左侧和右侧.我想让它们都与蓝色宽度相同,并将它们直接绘制在彼此之上.

我怎样才能做到这一点?

请注意,我确信箱形图对于我要显示的数据不会重叠,就像它们不适用于给定的示例数据一样.

r ggplot2

8
推荐指数
1
解决办法
4808
查看次数

sed和Mac OS X与上部,下部和整个捕获控制序列的差异

我试图从大写的文件名中取出最后两个字母,并将它们以小写形式附加到文件名.我完成了命令:

ls | sed -e "s/.*\([A-Z][A-Z]\)$/\0\/\L\1\E/"
Run Code Online (Sandbox Code Playgroud)

实现这一点,在我的Ubuntu箱它工作得很好,但在我的Mac它简单地打印出一个0/LXXE/地方XX是从捕获正确的字母.

什么是Mac sed等价物\0,\L\E

我已经浏览过网络,有几个人注意到Mac OS X sed与Ubuntu sed有所不同,但是大多数线程都在讨论-i文件扩展名或空字符串的要求(以前曾让我失望).

macos sed

8
推荐指数
2
解决办法
4334
查看次数

直接从文本文件绘制函数

有没有办法根据文本文件中的值绘制函数?

我知道如何在gnuplot中定义一个函数然后绘制它,但这不是我需要的.我有一个表常常更新的函数常量.当这个更新发生时,我希望能够运行一个用这条新曲线绘制图形的脚本.由于绘制的数字很少,我想自动化该过程.

这是一个包含常量的示例表:

location a  b  c
1        1  3  4
2
Run Code Online (Sandbox Code Playgroud)

我有两种方法可以解决问题,但我不知道它们是否以及如何实施.

  1. 然后,我可以使用awk生成字符串:f(x)=1(x)**2+3(x)+4,将其写入文件,并以某种方式使gnuplot读取此新文件并绘制在特定x范围内.
  2. 或者在gnuplot中使用awk之类的东西f(x) = awk /1/ {print "f(x)="$2,或者直接在plot命令中使用awk.

我无论如何,我被困住了,并没有在网上找到解决这个问题的方法,你有什么建议吗?

awk gnuplot

7
推荐指数
1
解决办法
1560
查看次数

在unix中的两个固定格式文件中查找字段值 - 不起作用

我有2个固定长度的文件输入#1和输入#2.我想根据两个文件中位置37-50的值来匹配行(pos 37-50在两个文件中都有相同的值).

如果找到任何匹配记录,则根据输入文件#1(位置99直到行尾)的公司代码和发票编号剪切该值.

剪切字符串(来自输入#1)需要附加在记录/行的末尾.

下面是我尝试的代码(不工作)以及输入文件和所需的输出.请提供您的建议.

码:

awk '
NR==FNR && NF>1 {
    v=substr($0,37,14);
#print substr($0,37,14)
    next
}
NR==FNR && ( /Company Code/ OR /Invoice Number/ ) {
    sub(/Company Code/,"",$0);
    sub(/Invoice Number/,"",$0);
    a[v]=$0;
print $0
    next
}
(substr($0,37,14) in a) {
    print $0 a[substr($0,99)]
}' Input1.txt input2.txt input3.txt
Run Code Online (Sandbox Code Playgroud)

结束代码

输入#1 以一些空格开头的 Start

         612  1111111111201402120000       2     1  111  211 Due Date                             20140101                           
         612  1111111111201402120000       2     1  111  311 Company Code                         227                                
         612  1111111111201402120000       2     1  111  411 Item Code                            12                                 
         612 …
Run Code Online (Sandbox Code Playgroud)

unix shell awk

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

通过 Snakemake 的符号链接(自动生成)目录

我正在尝试为 Snakemake 工作流程中的输出目录别名创建一个符号链接目录结构。

让我们考虑以下示例:

很久以前,在一个遥远的星系里,有人想找到宇宙中最好的冰淇淋口味,并进行了一项调查。我们的示例工作流程旨在通过目录结构表示投票。调查是用英语进行的(因为他们在那个外国星系都说英语),但结果也应该被非英语人士理解。符号链接可以解决问题。

为了使我们人类和 Snakemake 可以解析输入,我们将它们粘贴到一个 YAML 文件中:

cat config.yaml
Run Code Online (Sandbox Code Playgroud)
flavours:
  chocolate:
    - vader
    - luke
    - han
  vanilla:
    - yoda
    - leia
  berry:
    - windu
translations:
  french:
    chocolat: chocolate
    vanille: vanilla
    baie: berry
  german:
    schokolade: chocolate
    vanille: vanilla
    beere: berry
Run Code Online (Sandbox Code Playgroud)

为了创建相应的目录树,我从这个简单的 Snakefile 开始:

flavours:
  chocolate:
    - vader
    - luke
    - han
  vanilla:
    - yoda
    - leia
  berry:
    - windu
translations:
  french:
    chocolat: chocolate
    vanille: vanilla
    baie: berry
  german:
    schokolade: chocolate
    vanille: vanilla
    beere: berry
Run Code Online (Sandbox Code Playgroud)

我确信有更多 'pythonic' 方法来实现我想要的,但这只是一个简单的例子来说明我的问题。 …

python directory symlink makefile snakemake

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

在将后续作业提交到PBS群集之前,等待用户的所有作业完成

我试图调整一些bash脚本,使它们在()集群上运行.

各个任务由几个由主脚本启动的脚本执行.到目前为止,这个主要脚本在后台启动多个脚本(通过附加&),使它们在一个多核机器上并行运行.我希望用qsubs 代替这些调用来分配集群节点的负载.

但是,有些工作依赖于其他工作才能开始.到目前为止,这是通过wait主脚本中的语句实现的.但是使用Grid Engine的最佳方法是什么?

我已经在手册页中找到了这个问题-W after:jobid[:jobid...]文档,qsub但我希望有更好的方法.我们正在谈论几个并行运行的thousend作业和另一个相同大小的一组,以便在最后一个完成之后同时运行.这意味着我必须根据很多工作排队很多工作.

我可以通过在中间使用虚拟作业来减少这种情况,除了取决于第二组可能依赖的第一组作业之外什么都不做.这会将依赖数量从数百万减少到数千,但仍然是:它是错误的,我甚至不确定shell是否会接受如此长的命令行.

  • 有没有办法等待的所有工作完成(类似的东西qwait -u <user>)?
  • 或者从这个脚本提交的所有作业(类似的东西qwait [-p <PID>])?

当然可以在循环中使用qstat和编写这样的东西,但我想这个用例非常重要,有一个内置的解决方案,我只是无法想出那个.sleepwhile

在这种情况下你会推荐/使用什么?

附录一:

由于在评论中要求:

$ qsub --version
version: 2.4.8
Run Code Online (Sandbox Code Playgroud)

也许也有助于确定准确的系统:

$ qsub --help
usage: qsub [-a date_time] [-A account_string] [-b secs]
      [-c [ none | { enabled | periodic | shutdown |
      depth=<int> | dir=<path> | interval=<minutes>}... ] …
Run Code Online (Sandbox Code Playgroud)

shell cluster-computing wait qsub pbs

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