小编sja*_*obi的帖子

何时使用RSpec let()?

我倾向于在块之前使用来设置实例变量.然后,我在我的示例中使用这些变量.我最近遇到了let().根据RSpec文档,它习惯了

...定义一个memoized帮助方法.该值将在同一示例中的多个调用之间缓存,但不跨示例缓存.

这与在块之前使用实例变量有什么不同?还有什么时候你应该使用let()vs before()

ruby rspec

442
推荐指数
7
解决办法
11万
查看次数

R中模型矩阵中因子的所有级别

我有一个data.frame数字和因子变量组成,如下所示.

testFrame <- data.frame(First=sample(1:10, 20, replace=T),
           Second=sample(1:20, 20, replace=T), Third=sample(1:10, 20, replace=T),
           Fourth=rep(c("Alice","Bob","Charlie","David"), 5),
           Fifth=rep(c("Edward","Frank","Georgia","Hank","Isaac"),4))
Run Code Online (Sandbox Code Playgroud)

我想构建一个matrix为该因子分配虚拟变量并单独保留数值变量.

model.matrix(~ First + Second + Third + Fourth + Fifth, data=testFrame)
Run Code Online (Sandbox Code Playgroud)

正如预期的那样,在运行时会将lm每个因子的一个级别作为参考级别.但是,我想为matrix所有因素的每个级别构建一个带有虚拟/指示变量的变量.我正在建立这个矩阵,glmnet所以我不担心多重共线性.

有没有办法model.matrix为每个级别的因子创建假人?

model r matrix indicator

62
推荐指数
4
解决办法
5万
查看次数

如何从二元指标矩阵创建因子?

说我有以下的基质mat,这是水平的二进制指示符矩阵A,BC用于一组5个的观察:

mat <- matrix(c(1,0,0,
                1,0,0,
                0,1,0,
                0,1,0,
                0,0,1), ncol = 3, byrow = TRUE)
colnames(mat) <- LETTERS[1:3]

> mat
     A B C
[1,] 1 0 0
[2,] 1 0 0
[3,] 0 1 0
[4,] 0 1 0
[5,] 0 0 1
Run Code Online (Sandbox Code Playgroud)

我想将其转换为单个因子,使输出等效fac定义为:

> fac <- factor(rep(LETTERS[1:3], times = c(2,2,1)))
> fac
[1] A A B B C
Levels: A B C
Run Code Online (Sandbox Code Playgroud)

如果您从字母组合中获取标签,则会有额外的分数mat,但是一组数字代码(例如c(1,1,2,2,3))也可以作为所需的输出.

r

16
推荐指数
3
解决办法
4704
查看次数

显示所有字节的十六进制值,即使存在 ASCII 字符

至少在 Python (3) 中,如果二进制值具有 ASCII 表示,则会显示它而不是十六进制值。例如,67ASCII的二进制值C如下所示:

bytes([67]) # b'C'
Run Code Online (Sandbox Code Playgroud)

而对于没有 ASCII 表示的二进制值,它们以十六进制显示。IE

b'\x0f'
Run Code Online (Sandbox Code Playgroud)

有没有办法强制 Python 以二进制十六进制形式显示二进制值(如果这就是所谓的),即使有 ASCII 表示?

编辑:我的意思是,以 , 开头的东西b'\x'。例如,当您寻找要打印的特定字节时,这将使调试更容易。

谢谢

python

16
推荐指数
2
解决办法
5442
查看次数

`stack clean`和删除`.stack-work`目录有什么区别?

1上下文

我参与了一个涉及大量C位和FFI的Haskell项目.所以我发现自己经常运行并重新运行命令

$ stack build
$ stack build --force-dirty
$ stack clean
$ rm ./.stack-work
Run Code Online (Sandbox Code Playgroud)

反复进行,以便将C位正确链接到Haskell位.换句话说,有时事情在运行时才起作用stack build,有时它们不起作用(在这种情况下,我被迫一遍又一遍地循环上述命令,直到我的项目正确构建).

这意味着我没有正确理解在组装Haskell位之前stack(通过ghc)如何组装C位.所以这里有一个问题可以帮助我开始清理我的困惑:

2问题

运行stack clean和删除目录内容之间是否有任何值得注意的区别.stack-work?是否有.stack-work必要删除目录作为一个很好的预防措施,以确保您实际运行干净的构建?

haskell haskell-stack

13
推荐指数
1
解决办法
1300
查看次数

"~2,爆破"的核心是什么意思?

根据文档,启用sudo的环境提供"~2"核心,"爆破".我不明白这是什么意思.

我认为这篇博文中有一个暗示:

我们的遗留构建基础架构中的构建容器具有1.5个核心(具有突发容量)

可悲的是,我不知道"突发容量"是什么.

我之前在Travis CI问题跟踪器上问过这个问题,但由于我没有回答,我希望我可以在这里找到一个.

travis-ci

13
推荐指数
1
解决办法
790
查看次数

重新编码/重新定位具有不同级别的数据框架因子

每当我必须重新编码一组变量时,我都会考虑SPSS重新编码功能.我必须承认这很简单.包中有一个类似的recode功能car,它可以解决这个问题,但我们假设我希望完成任务factor.

我有data.frame几个变量值,范围从1到7.我想"反转"变量值,因此用7s替换1s,用6s替换2s,用5s替换3s等.我可以使用factor函数:

# create dummy factor
set.seed(100)
x <- as.factor(round(runif(100,1,7)))
y <- factor(x, levels = rev(levels(x)))
Run Code Online (Sandbox Code Playgroud)

如果我跑:

> levels(x)
[1] "1" "2" "3" "4" "5" "6" "7"
> levels(y)
[1] "7" "6" "5" "4" "3" "2" "1"
Run Code Online (Sandbox Code Playgroud)

当我想重新编码没有相同级别的因子时,问题就开始了.如果某个因子z有水平c("1", "3", "4", "6", "7"),是否有可能通过利用factor函数来"反转"水平,所以1 = 7,2 = 6,3 = 5等?

其他有效的重新编码功能就足够了!

r levels

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

如何将"容器"包添加到我的.cabal文件中(在编译时不被堆栈覆盖)?

我正在研究练习Haskell轨道的"罗马数字"任务,并按照他们的指示安装堆栈.我正在使用Fedora 24盒子.

只要我从基地使用Haskell模块,我就没有问题.现在我正在尝试导入Data.Map模块.使用ghci命令行可以正常工作:

$ ghci
GHCi, version 7.8.4: http://www.haskell.org/ghc/  :? for help
Loading package ghc-prim ... linking ... done.
Loading package integer-gmp ... linking ... done.
Loading package base ... linking ... done.
Prelude> import Data.Map
Prelude Data.Map> 
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试使用以下命令从我的src文件中导入它时:

import qualified Data.Map as M (foldlWithKey, fromList)
Run Code Online (Sandbox Code Playgroud)

我尝试运行测试时遇到问题:

$ stack test
roman-numerals-0.0.0: build (lib + test)
Preprocessing library roman-numerals-0.0.0...
[2 of 2] Compiling Roman            (...)
(...) /roman-numerals/src/Roman.hs:3:1: error:
    Failed to load interface for ‘Data.Map’
    It is a member of …
Run Code Online (Sandbox Code Playgroud)

haskell cabal haskell-stack

10
推荐指数
1
解决办法
1075
查看次数

Stack (Haskell) 使用 GitHub Actions 构建源文件缓存

使用 本地构建我的 Haskell 项目时stack build,仅重新编译更改的源文件。不幸的是,我无法让 Stack 在 GitHub Actions 上表现得像这样。请问有什么建议吗?

例子

我用Lib.hsand创建了一个简单的例子Fib.hs,我什至检查缓存的 .stack-work 文件夹是否在构建之间更新,但它总是编译两个文件,即使只更改一个文件。

这是示例:

  1. (未使用缓存,同时构建Lib.hsFib.hs+ 依赖项):https : //github.com/MarekSuchanek/stack-test/runs/542163994
  2. (仅Lib.hs更改,同时构建Lib.hsFib.hs):https : //github.com/MarekSuchanek/stack-test/runs/542174351

我可以从日志(详细堆栈)中观察到缓存中的某些内容正在更新,但我完全不清楚是什么以及为什么。它正确地发现只有Lib.hs被改变了:“ stack-test-0.1.0.0: unregistering (local file changes: src/Lib.hs)”所以我不明白为什么所有的都被编译了。我注意到,在2Fib.hi没有更新,.stack-work但其他人(Fib.oFib.dyn_hi,和Fib.dyn_o)是。

笔记

当没有更改源文件时, ~/.stack 缓存是可以的,也可以不构建。当然,这是一个虚拟示例,但我们有不同的项目,其中包含更多源文件,可以显着加快构建速度。当更改非源文件(例如 README 文件)时,不会按预期构建任何内容。

caching haskell cabal haskell-stack github-actions

10
推荐指数
1
解决办法
610
查看次数

如何在R中的因子水平内进行中位数分裂?

在这里,我创建一个新列,以指示myData是高于还是低于其中位数

### MedianSplits based on Whole Data
#create some test data
myDataFrame=data.frame(myData=runif(15),myFactor=rep(c("A","B","C"),5)) 

#create column showing median split
myBreaks= quantile(myDataFrame$myData,c(0,.5,1))
myDataFrame$MedianSplitWholeData = cut(
    myDataFrame$myData,
    breaks=myBreaks, 
    include.lowest=TRUE,
    labels=c("Below","Above"))

#Check if it's correct
myDataFrame$AboveWholeMedian = myDataFrame$myData > median(myDataFrame$myData)
myDataFrame
Run Code Online (Sandbox Code Playgroud)

工作良好.现在我想做同样的事情,但计算myFactor每个级别的中位数分割.

我想出来了:

#Median splits within factor levels
byOutput=by(myDataFrame$myData,myDataFrame$myFactor, function (x) {
     myBreaks= quantile(x,c(0,.5,1))
     MedianSplitByGroup=cut(x,
       breaks=myBreaks, 
       include.lowest=TRUE,
       labels=c("Below","Above"))
     MedianSplitByGroup
     })
Run Code Online (Sandbox Code Playgroud)

byOutput包含我想要的东西.它正确地对因子A,B和C的每个元素进行分类.但是我想创建一个新列myDataFrame $ FactorLevelMedianSplit,它显示新计算的中值分割.

如何将"by"命令的输出转换为有用的数据框列?

我想也许"by"命令不是R-like方式来做这个...

更新:

有了Thierry如何巧妙地使用factor()的例子,并且在Spector的书中发现了"ave"函数,我发现了这个解决方案,它不需要额外的包.

myDataFrame$MediansByFactor=ave(
    myDataFrame$myData,
    myDataFrame$myFactor,
    FUN=median)

myDataFrame$FactorLevelMedianSplit = factor(
    myDataFrame$myData>myDataFrame$MediansByFactor, 
    levels = c(TRUE, FALSE), 
    labels = c("Above", "Below"))
Run Code Online (Sandbox Code Playgroud)

r median dataframe

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