我想完成两件事.首先,如果我有一个向量,1:5我想得到一个矩阵(或两个向量),表示这些元素的唯一组合,包括两倍相同的数字,但不包括重复.
现在我可以使用矩阵来做到这一点:
foo <- matrix(1:5,5,5)
cbind(foo[upper.tri(foo,diag=TRUE)],foo[lower.tri(foo,diag=TRUE)])
[,1] [,2]
[1,] 1 1
[2,] 1 2
[3,] 2 3
[4,] 1 4
[5,] 2 5
[6,] 3 2
[7,] 1 3
[8,] 2 4
[9,] 3 5
[10,] 4 3
[11,] 1 4
[12,] 2 5
[13,] 3 4
[14,] 4 5
[15,] 5 5
Run Code Online (Sandbox Code Playgroud)
但必须有一个更简单的方法.我试图用Vectorize的seq,但是这给了我一个错误:
cbind(Vectorize(seq,"from")(1:5,5),Vectorize(seq,"to")(5,1:5))
Error in Vectorize(seq, "from") :
must specify formal argument names to vectorize
Run Code Online (Sandbox Code Playgroud)
我要做的第二件事是如果我有一个包含向量的列表bar,以获得一个包含重复列表元素的向量,该向量等于该元素中元素的数量.我可以这样做:
unlist(apply(rbind(1:length(bar),sapply(bar,length)),2,function(x)rep(x[1],x[2])))
[1] 1 1 …Run Code Online (Sandbox Code Playgroud) 给定谓词"p",它表示解决方案是否足够好.成本函数"f"表示可能的解决方案有多好,以及在一系列可能的解决方案中搜索"最佳"(即最低成本)解决方案的函数.如何取消评估的惯用方法 - 如果谓词确保当前解决方案"足够好" - 看起来像.
即是这样的:
let search p f solutionSpace =
solutionSpace |> Seq.map (fun x -> f x, x)
|> Seq.ignoreAllFollowingElementsWhenPredicateIsTrue (fun (c, s) -> p c)
|> Seq.minBy (fun (c, _) -> c)
Run Code Online (Sandbox Code Playgroud) 我试图用jdbc从数据库中查询数据.问题是某些列是数组类型.
;get that particular column
(def jdbc-array (with-connection *db*
(with-query-results rs ["select * from refgene limit 5"]
(:exonstarts (first rs)))))
;Check if it has a value
(print jdbc-array)
;#<Jdbc4Array {67075873,67078739,67085754,67100417,67109640,67113051,67129424,67131499,67143471,67162932}>nil
;check class
(class jdbc-array)
;org.postgresql.jdbc4.Jdbc4Array
Run Code Online (Sandbox Code Playgroud)
如何在clojure中将此数组转换为seq/vector?我试过(seq jdbc-array)和(seq(.getArray jdbc-array)但两者都不起作用...
一大早和Erlang一起玩我得到了一个奇怪的结果:
-module(bucle01).
-compile(export_all).
for(N) when N >=0 ->
lists:seq(1,N).
for(L,N) when L =< N ->
lists:seq(L,N);
for(L,N) when L > N ->
lists:reverse(for(N,L)).
Run Code Online (Sandbox Code Playgroud)
当我运行程序时,我看到了这个:
> bucle01:for(1,10).
[1,2,3,4,5,6,7,8,9,10]
> bucle01:for(10,1).
[10,9,8,7,6,5,4,3,2,1]
>bucle01:for(7,10).
[7,8,9,10]
>bucle01:for(8,10).
"\b\t\n" %% What's that !?!
>bucle01:for(10,8).
"\n\t\b" %% After all it has some logic !
Run Code Online (Sandbox Code Playgroud)
任何"Kool-Aid"到"不要喝太多"请?
我如何懒惰地"克隆"Clojure中的seq.有点像
(let [[s1 s2] (clone-seq s)]
...)
Run Code Online (Sandbox Code Playgroud)
这样s1和s2是由s支持的独立seqs?
快问.我目前正在设计一些数据库查询,以便将相当大但不是大量的数据集提取到内存中,比如大约10k-100k的记录.
到目前为止,我一直在测试将这些结果集加载到scala.collection.immutable.Seq中,并发现它似乎花费了相当长的时间来构建集合.然而,如果我更改为Vector或List,则写入内存只需几分之一秒.
我的问题是,为什么Seq在这种情况下如此缓慢?如果是这样,在什么情况下使用Seq比Vector更合适?
谢谢
我有一个像
ProjectID Dist
1 x
1 y
2 z
2 x
2 h
3 k
.... ....
Run Code Online (Sandbox Code Playgroud)
我想添加第三列,以便每个ProjectID都有一个递增计数器:
ProjectID Dist counter
1 x 1
1 y 2
2 z 1
2 x 2
2 h 3
1 k 3
.... ....
Run Code Online (Sandbox Code Playgroud)
我看了一下,seq rank还有其他一些地方,特别是看我是否可以使用ddply以帮助您:
df$counter <- ddply(df,.(projectID), function(x).....? )
Run Code Online (Sandbox Code Playgroud)
我想我可以调整此答案如何按组创建计数器/计数?但是更喜欢使用ddply之类的东西(我找不到与cumsum等效的东西,但是我认为这是相同的原理:在Pandas中按组创建整数递增的序列)。那会让我索引列表中的出现(例如在此列表上合并)。
F#中的哪些元素是惰性评估的,哪些元素是急切评估的?据我所知,如果"seq"是懒惰的评估,它是否意味着"列表"是急切评估的?我是如何证明的?谢谢
更新:我为此创建了一个UserVoice请求:展开Seq的基数函数.
我需要功能Seq.exactlyOne,但有Some/None语义.换句话说,我需要Seq.head,或者,如果序列为空或包含多个项目,我什么都不需要.使用Seq.exactlyOne会抛出这种情况.
我不认为有一种内置的方式来获得这个(虽然它听起来如此微不足道,以至于人们会期望有一个对应物Seq.singleton).我想出了这个,但感觉很复杂:
let trySingleton sq =
match Seq.isEmpty sq with
| true -> None
| false ->
match sq |> Seq.indexed |> Seq.tryFind (fst >> ((=) 1)) with
| Some _ -> None
| None -> Seq.exactlyOne sq |> Some
Run Code Online (Sandbox Code Playgroud)
得到:
> trySingleton [|1;2;3|];;
val it : int option = None
> trySingleton Seq.empty<int>;;
val it : int option = None
> trySingleton [|1|];;
val it : int …Run Code Online (Sandbox Code Playgroud) 此类型定义有效:
type Model<'t,'u when 't :> seq<'u> >(query: unit -> 't) = class end
Run Code Online (Sandbox Code Playgroud)
但是,对我来说,'u这里是多余的,但下一个定义是:
type Model<'t when 't :> seq<_> >(query: unit -> 't) = class end
Run Code Online (Sandbox Code Playgroud)
产生错误:
此声明中不允许使用匿名类型变量-
F# Compiler (715)
最紧凑的形式:
type Model<'t>(query:unit -> #seq<'t>) = class end
Run Code Online (Sandbox Code Playgroud)
在实例创建过程中:
Query.users |> Model
Run Code Online (Sandbox Code Playgroud)
产生错误:
类型约束不匹配。类型
unit -> (string * int) list
与类型不兼容unit -> 'a
F# Compiler (193)
可能是由于此处所述,为什么记录类型定义中不允许使用灵活类型?。但是无论如何,错误说明对我来说还是不清楚的,用(string * int) list代替代替有'a什么问题?
实类型Model是数据库查询的包装,它实现INotifyPropertyChanged并包含mutable …