Makefiles有许多不错的东西,而且很多东西都很痛苦.
在做各种项目的过程中(我是一名研究科学家," 数据科学家 "或其他什么)我经常发现自己从磁盘上的一些数据对象开始,从那些数据对象生成各种工件,从这些工件生成工件,以及等等.
如果我可以说"这个对象依赖于这些其他对象",并且"这个对象是从这些对象以下面的方式创建的",然后请求类似Make的框架来处理实际构建它们的细节,这将是很好的. ,找出需要更新的对象,将工作分配到多个处理器(如Make的-j选项),等等.Makefile可以做到这一切 - 但是最大的问题是所有的动作都必须写成shell命令.如果我在R或Perl或其他类似的环境中工作,这是不方便的.此外,Make中的一个强有力的假设是所有目标都是文件 - 有一些例外和解决方法,但如果我的目标是例如数据库中的行,那将是非常痛苦的.
要清楚,我不是在使用软件构建系统.我对(通常是什么?)处理工件依赖网络的事情感兴趣.
有谁知道这种依赖网络的框架?看起来它可能是一个很好的数据科学工具,可视化地显示结果的生成方式等.
我最近看到的一个非常有趣的例子是IncPy,但它似乎在很长一段时间内都没有被触及,而且它与Python非常紧密地结合在一起.它可能也比我希望的更加雄心勃勃,这就是它必须与Python紧密结合的原因.
对于模糊的问题,我们深表歉意,如果有些说明有帮助,请与我们联系.
对于我正在开发的角色,我需要验证内核版本是否大于特定版本.
我找到了ansible_kernel值,但是有一种简单的方法可以将它与其他版本进行比较吗?我以为我可能手动爆炸'.'上的版本字符串并比较数字,但我甚至找不到友好的过滤器来爆炸版本字符串,所以我不知所措.
提前致谢.
Ť
在运行testthat测试时是否可以在RStudio中调用调试器?我无法找到允许此设置的设置(在设置中使用"使用devtools包功能"的各种组合,点击"Build - > More"菜单中的"Test Package"选项,test()在控制台中运行,投入browser()电话等),但还没有找到一种方法呢.
我还发现自己迷路了很多测试时,不确定是否正在运行已安装在系统库中的代码(做"构建和重新载入"),或正在运行就地从本地R目录,或者是什么-有时RStudio抱怨在重建包之前不能设置断点(所以我怀疑是前者)或者没有(所以我怀疑是后者).不确定这个问题是否与我的主要问题密切相关.
在没有找到进入调试器的方法的情况下,我最终将测试代码粘贴到控制台中并以非常特别的方式工作,并基本上将我的TDD习惯放在脚下.所以任何建议都会受到赞赏 - 如果无法调用调试器,任何建议的解决方法?
我在OS X上以本地模式运行RStudio版本0.99.447,使用R 3.2.1.
编辑 - 我也想知道更多关于选项的背景知识,例如"选项X永远不会支持调试,因为它在分叉的过程中运行,而是尝试使用其他选项Y".
更新 - 此处没有回复,我也在https://support.rstudio.com/hc/communities/public/questions/204779797-Debugging-testthat-tests-in-RStudio(我也没有响应).
我正处于scala的第二个晚上,我正在抵制用scala写东西的冲动,我曾经在java中做过这些,并试图学习所有的习语.在这种情况下,我希望只使用闭包,映射和列表理解这样的东西来计算平均值.无论这是否是计算平均值的最佳方法,我只想知道如何在scala中执行这些操作仅用于学习目的
这是一个例子:下面的平均方法几乎没有实现.我有几个其他的方法来查找个人用户ID给出的评级使用TraversableLike的查找方法(我认为),但没有更多的是scala特定的,真的.我如何计算给定List [RatingEvent]的平均值,其中RatingEvent.rating是一个双值,我将以类似scala的方式计算该List的所有值的平均值?
package com.brinksys.liftnex.model
class Movie(val id : Int, val ratingEvents : List[RatingEvent]) {
def getRatingByUser(userId : Int) : Int = {
return getRatingEventByUserId(userId).rating
}
def getRatingEventByUserId(userId : Int) : RatingEvent = {
var result = ratingEvents find {e => e.userId == userId }
return result.get
}
def average() : Double = {
/*
fill in the blanks where an average of all ratingEvent.rating values is expected
*/
return 3.8
}
}
Run Code Online (Sandbox Code Playgroud)
经验丰富的scala pro如何填充该方法并使用scala的功能使其尽可能简洁?我知道如何在java中这样做,这是我想要避免的.
如果我在python中这样做,我认为最pythonic的方式是:
sum([re.rating. for re in …Run Code Online (Sandbox Code Playgroud) 我可以创建一个像这样的刻面图,有3个垂直堆积的图:
ggplot(iris, aes(Petal.Length)) + stat_bin() + facet_grid(Species ~ .)
Run Code Online (Sandbox Code Playgroud)
是否可以将标签移动到每个图形的顶部,就像我在水平堆叠时一样facet_grid(. ~ Species)?
我想要的原因是我的绘图是长时间序列图,所以我想要每个绘图的全宽,但是每个绘图的标签(基本上用作解释刻面的标题)太长而不适合小标题右侧的标签区域.
我读到Git主要添加有关存储库历史的信息,试图记住所做的每一个更改,但是还有一些命令会发生不可逆转的更改.
有什么命令我应该注意并避免错误地使用,因为没有回头路?
Python中是否有任何组合编译正则表达式的机制?
我知道可以通过.pattern从现有模式对象中提取plain-old-string 属性来编译新表达式.但这在几个方面失败了.例如:
import re
first = re.compile(r"(hello?\s*)")
# one-two-three or one/two/three - but not one-two/three or one/two-three
second = re.compile(r"one(?P<r1>[-/])two(?P=r1)three", re.IGNORECASE)
# Incorrect - back-reference \1 would refer to the wrong capturing group now,
# and we get an error "redefinition of group name 'r1' as group 3; was
# group 2 at position 47" for the `(?P)` group.
# Result is also now case-sensitive, unlike 'second' which is IGNORECASE
both = re.compile(first.pattern + second.pattern + second.pattern) …Run Code Online (Sandbox Code Playgroud) 我正在使用R的ff包,我有一些ffdf我需要使用的对象(尺寸大约1.5M x 80).虽然我在高效的切片/切割操作中遇到了一些麻烦.
例如,我有两个名为"YEAR"和"AGE"的整数列,我想在YEAR是2005年时创建一个AGE表.
一种方法是:
ffwhich <- function(x, expr) {
b <- bit(nrow(x))
for(i in chunk(x)) b[i] <- eval(substitute(expr), x[i,])
b
}
bw <- ffwhich(a.fdf, YEAR==1999)
answer <- table(a.fdf[bw, "AGE"])
Run Code Online (Sandbox Code Playgroud)
该table()操作速度快,但建设的位向量是相当缓慢.任何人都有更好的建议吗?
我的MatrixR 稀疏,显然对我来说太大as.matrix()了(虽然它也不是超大).有as.matrix()问题的调用是在svd()函数内部,所以我想知道是否有人知道不需要先转换为密集矩阵的SVD的不同实现.
我的当前git status看起来像这样:
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# modified: docs/file3.org
# modified: src/main/R/lib.R
#
# Changes not staged for commit:
# (use "git add <file>..." to update what will be committed)
# (use "git checkout -- <file>..." to discard changes in working directory)
#
# modified: docs/file3.org
# modified: src/main/R/lib.R
Run Code Online (Sandbox Code Playgroud)
我想首先将阶段性更改提交docs/file3.org,然后再进行其他阶段性更改.但是,如果我这样做git commit -m '...' docs/file3.org,它将提交对该文件的分阶段和非分阶段更改.
是否有捷径可寻?或者我是否需要进行未stash分级的更改,取消其中一个文件,提交另一个,重新设置,提交和stash pop?