小编Cla*_*ley的帖子

有没有'git sed'或同等价值?

假设我想重命名git存储库中包含的源代码中的方法.我可以手动执行此操作,但方法名称可能位于多个位置(例如,单元测试,文档,实际方法).要检查方法的使用位置,我使用'git grep'.我得到'git grep'只显示我想要更改的行,然后我没有自动更改这些行的工作流程.

我正在寻找一种自动化方式(希望使用git工具)来完成最后一步.我希望有某种'git sed'或等同物,但我找不到任何东西.

我想的界面会很好:git sed's/old-method-name/new-method-name/g'

linux git bash sed

41
推荐指数
5
解决办法
8324
查看次数

将bash提示符下的当前命令复制到剪贴板

我想快速键盘命令序列将当前命令在bash提示符下复制到剪贴板.

因此,例如,要将最后一个bash命令复制到剪贴板,我按下+ [some command sequence]来复制它.或者,例如,要在bash中搜索命令,我会使用ctrl + r,搜索,在命令提示符下显示它,然后[some command sequence]复制它等.

我目前的解决方案是使用bash管道:管道进出剪贴板

因此,要将上一个命令复制到剪贴板:

echo "!!" | pbcopy
Run Code Online (Sandbox Code Playgroud)

这不是太可怕,但如果要复制的命令不是最后一个命令,等等.

实现我想要实现的目标的正确方法是什么?

macos bash

17
推荐指数
2
解决办法
8715
查看次数

在不改变绘图中的排序的情况下翻转图例的顺序

我发现当coord_flip()使用ggplot2 添加到某些图时,图例中值的顺序不再与图中值的顺序对齐.

例如:

dTbl = data.frame(x=c(1,2,3,4,5,6,7,8),
                  y=c('a','a','b','b','a','a','b','b'),
                  z=c('q','q','q','q','r','r','r','r'))

print(ggplot(dTbl, aes(x=factor(y),y=x, fill=z)) +
      geom_bar(position=position_dodge(), stat='identity') +
      coord_flip() +
      theme(legend.position='top', legend.direction='vertical'))
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

我希望在不改变图中'q'和'r'的顺序的情况下反转图例中的'q'和'r'.

scale.x.reverse() 看起来很有希望,但似乎并没有在因素范围内起作用(就像这个条形图的情况一样).

r ggplot2

17
推荐指数
1
解决办法
6796
查看次数

bash选项卡完成筛选选项

我想让bash中的标签完成更加智能化.

假设我有一个带有src文件的文件夹.lisp,以及该文件.fasl的编译版本.我想键入vi filename [tab tab],并且.lisp autocompletes作为唯一选项.也就是说,我不太可能希望vim打开已编译的二进制文件,因此不要在自动完成选项列表中进行循环.

是否有一种方法可以保留自动完成忽略的扩展列表,或以某种方式为vim自定义,以便自动完成在bash命令以vi开头时仅忽略特定的文件扩展名...

任何想法都表示赞赏.

谢谢!

bash

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

使用bash进程替换sudo命令

我想使用bash进程替换sudo命令.

例如,这是一个适用于我的非sudo命令:

$ cat <(echo "installed.txt")
installed.txt
Run Code Online (Sandbox Code Playgroud)

这是命令的sudo版本不起作用:

$ sudo cat <(echo "installed.txt")
cat: /dev/fd/63: Bad file descriptor
Run Code Online (Sandbox Code Playgroud)

阅读sudo手册页,似乎在以root身份运行命令之前,sudo会关闭除stdin/stdout/stderr文件描述符之外的所有文件描述符.这让我认为bash在运行sudo命令之前正在创建描述符(并执行进程替换).

我将root的shell更改为bash(而不是默认值).我已经测试过,以root身份登录时该命令工作正常.它只能通过sudo命令工作.

实现我在这里要做的事情的适当技术是什么?Eval,引用,sudo标志,sudoers文件mod,其他?

bash

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

R和并行内存为parallel :: mclapply

我试图通过并行执行在大约1000个项目列表上执行的昂贵操作来利用四核机器.

我目前正在使用R的parallel :: mclapply函数:

res = rbind.fill(parallel::mclapply(lst, fun, mc.cores=3, mc.preschedule=T))
Run Code Online (Sandbox Code Playgroud)

哪个有效.问题是,产生的任何其他子进程必须分配大块内存:

在此输入图像描述

理想情况下,我希望每个内核都可以从父R进程访问共享内存,因此当我增加mclapply中使用的内核数量时,我不会在内核限制之前达到RAM限制.

我目前对如何调试此问题感到茫然.每个进程访问的所有大型数据结构都是全局(当前).这是某种问题吗?

我确实将操作系统的共享内存最大设置增加到20 GB(可用RAM):

$ cat /etc/sysctl.conf 
kern.sysv.shmmax=21474836480
kern.sysv.shmall=5242880
kern.sysv.shmmin=1
kern.sysv.shmmni=32
kern.sysv.shmseg=8
kern.maxprocperuid=512
kern.maxproc=2048
Run Code Online (Sandbox Code Playgroud)

我认为这会解决问题,但问题仍然存在.

还有其他想法吗?

macos r shared-memory

9
推荐指数
2
解决办法
2815
查看次数

R中的一个bquote拼接

假设我正在使用R的反引号运算符构建表达式bquote,并且我想在特定位置的列表中"拼接"(即,丢失列表的外括号).

例如,我有"5 + 4"这个表达式,我想在它的开头添加一个"6-",而不使用字符串操作(也就是说,完全在符号结构上操作时).

所以:

>   b = quote(5+4)
>   b
5 + 4
>   c = bquote(6-.(b))
>   c
6 - (5 + 4)
>   eval(c)
[1] -3
Run Code Online (Sandbox Code Playgroud)

我希望能够返回"6-5 + 4"的评价,所以5.

在常见的lisp中,反引号"`"运算符带有一个拼接运算符",@",就是这样做的:

CL-USER> 
(setf b `(5 + 4))
(5 + 4)
CL-USER> 
(setf c `(6 - ,@b))
(6 - 5 + 4)
CL-USER> 
(setf c-non-spliced `(6 - ,b))
(6 - (5 + 4))
CL-USER> 
Run Code Online (Sandbox Code Playgroud)

我尝试在R中使用.@(b),但这不起作用.还有其他想法吗?重申一下,我不想诉诸字符串操作.

r

9
推荐指数
2
解决办法
201
查看次数

如何构建从data.table到magrittr并返回data.table的管道

我想将data.table管道与magrittr流水线混合.我可以从data.table转到%>%,但我无法弄清楚如何回到[] [] data.table样式的流水线.

这是一个例子:

> tbl = data.table(grp=c(1,1,1,2,2,2,3,3,3,4,4), y=rnorm(11))
> tbl
    grp        y
 1:   1  0.08150
 2:   1  1.51330
 3:   1 -0.26154
 4:   2 -0.12746
 5:   2  0.10747
 6:   2  0.16502
 7:   3  0.54139
 8:   3 -0.04194
 9:   3  0.02373
10:   4  2.00756
11:   4  1.05523
> tbl[, .(.N, mean(y)), by=grp][order(-N)] %>% head(n=3) %>% .[, N := NULL]
   grp      V2
1:   1 0.44442
2:   2 0.04834
3:   3 0.17439
> tbl[, .(.N, mean(y)), by=grp][order(-N)] %>% head(n=3) %>% .[, N := …
Run Code Online (Sandbox Code Playgroud)

r magrittr data.table

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

适用于双向密钥< - > val查找表的数据结构

我在R中有一组键(字符)< - >哈希(整数)关联.我想将这些关联存储在一个结构中,允许我按键引用键/哈希对,也可以通过哈希引用.

所以像

"hello" <-> 1234
Run Code Online (Sandbox Code Playgroud)

在变量db.

并使用(ish;不必是这种精确的访问语法)访问它:

db["hello"] -> 1234
db[1234] -> "hello"
Run Code Online (Sandbox Code Playgroud)

我尝试使用数据框,并将密钥命名为rownames.但后来我无法通过哈希整数引用一行.如果我使用哈希整数作为rownames,那么我不能通过keyname引用等.

我目前的解决方案是将两个dbs保持为两个数据帧.一个有哈希作为rownames,另一个有键作为rownames.这是有效的,但保持两个相同的数据帧(除了他们的rownames)似乎有点尴尬和重复.

我希望它在两个方向都超级快:).我认为这意味着字符方向为O(log(n)),整数方向为O(1),但我不是数据结构/算法专家.整数方向的O(log(n))可能没问题,但我认为O(n)(需要遍历整个数据库解决方案)在任何一个方向上都会对事情造成太大影响.

数据库也是双射的.也就是说,每个键都映射到一个值,每个值都映射到一个键.

编辑:感谢您的帖子到目前为止:

运行一些测试,匹配技术肯定比键控data.table慢.正如Martin所指出的,这仅仅是因为匹配创建键控表所需的时间.也就是说,匹配和键控data.table都执行二进制搜索以查找值.但无论如何,在返回单个值时,匹配对于我的需求来说太慢了.所以我将编写一个data.table解决方案并发布.

> system.time(match(1,x))
   user  system elapsed 
  0.742   0.054   0.792 
> system.time(match(1,x))
   user  system elapsed 
  0.748   0.064   0.806 
> system.time(match(1e7,x))
   user  system elapsed 
  0.747   0.067   0.808 
> system.time(x.table[1])
   user  system elapsed 
      0       0       0 
> system.time(x.table[1e7])
   user  system elapsed 
  0.001   0.001   0.000 
> system.time(x.table[1e7])
   user  system elapsed 
  0.005   0.000   0.005 
> system.time(x.table[1])
   user  system elapsed 
  0.001   0.000   0.000 
> …
Run Code Online (Sandbox Code Playgroud)

r data-structures

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

data.table中的大整数.与1.8.10相比,分组结果在1.9.2中有所不同

我最近将data.table从1.8.10升级到1.9.2,并且在跨大整数分组时我发现两个版本之间存在以下差异.

是否有一个我需要在1.9.2中更改的设置,让以下两个组语句中的第一个像在1.8.10中那样工作(我认为1.8.10是正确的行为)?

另外,对于以下两个组语句中的第二个,两个包中的结果是相同的,但是预期的行为是什么?

1.8.10

>   library(data.table)
data.table 1.8.10  For help type: help("data.table")
>   foo = data.table(i = c(2884199399609098249, 2884199399608934409))
>   lapply(foo, class)
$i
[1] "numeric"

>   foo
                     i
1: 2884199399609098240
2: 2884199399608934400
>   foo[, .N, by=i]
                     i N
1: 2884199399609098240 1
2: 2884199399608934400 1
>   foo = data.table(i = c(9999999999999999999, 9999999999999999998))
>   foo[, .N, by=i]
                      i N
1: 10000000000000000000 2
> 
Run Code Online (Sandbox Code Playgroud)

并且1.9.2

>   library(data.table)
data.table 1.9.2  For help type: help("data.table")
>   foo = data.table(i = c(2884199399609098249, 2884199399608934409))
>   lapply(foo, class) …
Run Code Online (Sandbox Code Playgroud)

r data.table

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

标签 统计

r ×6

bash ×4

data.table ×2

macos ×2

data-structures ×1

ggplot2 ×1

git ×1

linux ×1

magrittr ×1

sed ×1

shared-memory ×1