使用Seq.cast似乎经常失败,即使对于如下简单的事情:
let xor c = Seq.cast c |> Seq.reduce (^^^)
xor [1;3] // Works, assuming because no cast is necessary
xor ['a';'b'] // Fails
xor [2u] // Fails
Run Code Online (Sandbox Code Playgroud)
后两者失败,Specified Cast无效.我错过了什么?
我试图用来Seq.cast转换一堆东西uint16,但由于某种原因它总是失败(即使我用它注释Seq.cast<uint32>).怎么了?
我需要定义一个名为(get-all-pairs key seq)的函数
它返回seq中所有以第一个元素为键的对的列表.如果没有对匹配,则返回空列表.
例如,如果我说宠物
(def pets
'((cat 1) (dog 1) (fish 1) (cat 2) (fish 2))
)
Run Code Online (Sandbox Code Playgroud)
(get-all-pairs 'cat pets)返回((cat 1) (cat 2))并(get-all-pairs 'bird pets)返回'().
这是我的尝试:
(defn get-all-pairs [key seq]
(cond
(= key (first(first(seq)))) (cons (first seq)
(get-all-pairs key (rest seq)))
:else '()))
Run Code Online (Sandbox Code Playgroud)
但它不起作用.如果我打电话给它,它的消息如下:
#'proj2.proj2/pets
=> (get-all-pairs 'cat pets)
ClassCastException clojure.lang.PersistentList cannot be cast to clojure.lang.IFn proj2.proj2/get-all-pairs (proj2.clj:20)
Run Code Online (Sandbox Code Playgroud)
我不知道问题出在哪里.怎么解决?
如果有人可以帮助我,我将非常感激.这看起来很简单,但我不知道如何去做.
我试图计算出相对于前一行的百分比变化.例如:我的数据框如下所示:
day value
1 21
2 23.4
3 10.7
4 5.6
5 3.2
6 35.2
7 12.9
8 67.8
. .
. .
. .
365 27.2
Run Code Online (Sandbox Code Playgroud)
我想要做的是计算每行相对于前一行的百分比变化.例如:
day value
1 21
2 (day2-day1/day1)*100
3 (day3-day2/day2)*100
4 (day4-day3/day3)*100
5 (day5-day4/day4)*100
6 (day6-day5/day5)*100
7 (day7-day6/day6)*100
8 (day8-day7/day7)*100
. .
. .
. .
365 (day365-day364/day364)*100
Run Code Online (Sandbox Code Playgroud)
然后打印出那些从前一行增加百分比> 50%的日子
非常感谢
我有一个data.frame我想按序列生成每个列表的随机数。
我使用sample函数来创建随机数,但即使我为 list 创建了随机数[[1]],以 [[2]]再次生成相同的数字。那么,在这里我如何为该集合创建不同的随机数[[2]]。
这是简单的代码;
data.list <- lapply(1:2, function(x) {
nrep <- 1
time <- rep(seq(90,54000,by=90),times=nrep)
Mx <- rep(sort(sample(seq(0.012,-0.014,length.out = 600),replace=TRUE)), times=nrep)
My <- rep(sort(sample(seq(0.02,-0.02,length.out = 600),replace=TRUE)), times=nrep)
Mz <- rep(sort(sample(seq(-1,1,length.out=600),replace=TRUE)), times=nrep)
data.frame(time,Mx,My,Mz,set_nbr=x)
})
Run Code Online (Sandbox Code Playgroud)
这是提供每个数据集的前 5 行
[[1]]
time Mx My Mz set_nbr
1 90 -1.391319e-02 -2.000000e-02 -1.000000000 1
2 180 -1.386978e-02 -1.986644e-02 -1.000000000 1
3 270 -1.386978e-02 -1.973289e-02 -0.996661102 1
4 360 -1.382638e-02 -1.973289e-02 -0.993322204 1
5 450 -1.382638e-02 …Run Code Online (Sandbox Code Playgroud) 我使用F#编写了自己的LINQ重新实现(感谢Jon Skeet的灵感).
我用一个技巧来生成空序列:
let empty<'b> =
seq {
for n = 0 to -1 do
yield Unchecked.defaultof<'b>
}
printfn "%A" empty<int> // -> seq []
Run Code Online (Sandbox Code Playgroud)
有没有惯用的方法来做到这一点?
(Seq.empty没用,我只是重新实现它)
在Scala中,如何将Seq [Int]转换为由Seq中的数字组成的单个数字.
例如
Seq(2,3,45,10)要234510为数字
一种简单的方法是
Seq(2,3,45,10).mkString.toLong
是否有更好的,可能更高性能/功能的方式?
我有一个SortedSet,我需要将它转换为Seq保留顺序(因为我需要map使用seq输出调用).
REPL中的几个测试显示toSeq保持订单以及toIndexedSeq但我需要确定:是否保证保持订单?
否则我可以使用,.toSeq.sorted但严重矫枉过正...
从文档中,我知道Nim数组在编译时确定了固定长度,而seqs具有可变长度.
我注意到seqs有更多的内置工具.例如,在sequtils模块中,map可以采用数组,但无论如何都将返回seq,all或者any不使用数组.而且我没有看到将固定大小的seq转换为数组的简单方法.
所以我的问题是:使用数组有什么好处?他们提供更快的访问吗?