我正在以类似的方式生成序列:
migrators
|> Seq.map (fun m -> m())
Run Code Online (Sandbox Code Playgroud)
该migrator函数最终返回一个受歧视的联合,如:
type MigratorResult =
| Success of string * TimeSpan
| Error of string * Exception
Run Code Online (Sandbox Code Playgroud)
我希望在map遇到我的第一次时停止,Error但我需要Error在最后的序列中加入.
我有以下内容向用户显示最终消息
match results |> List.rev with
| [] -> "No results equals no migrators"
| head :: _ ->
match head with
| Success (dt, t) -> "All migrators succeeded"
| Error (dt, ex) -> "Migration halted owing to error"
Run Code Online (Sandbox Code Playgroud)
所以我需要:
Error我很欣赏可能有一个不同的序列方法,除此之外map,我会对F#不熟悉并且在线搜索还没有产生任何东西!
List.Clear对于序列,java或c#等语言的Nim等价是什么?我看到在系统中列出了proc setLen,但我不确定它是否符合我的要求.从描述:
f the current length is greater than the new length, s will be truncated. s
这是否意味着每次我将任何seq len设置为0它将创建一个新的seq实例?
我有一个如下所示的数据集:
ID created_at
MUM-0001 2014-04-16
MUM-0002 2014-01-14
MUM-0003 2014-04-17
MUM-0004 2014-04-12
MUM-0005 2014-04-18
MUM-0006 2014-04-17
Run Code Online (Sandbox Code Playgroud)
我正在尝试引入新列,该列将是开始日期和定义的最后一天之间的所有日期(例如,2015年7月12日).我使用了seq函数dplyr但是出错了.
data1 <- data1 %>%
arrange(ID) %>%
group_by(ID) %>%
mutate(date = seq(as.Date(created_at), as.Date('2015-07-12'), by= 1))
Run Code Online (Sandbox Code Playgroud)
我得到的错误是:
错误:大小不兼容(453),期望1(组大小)或1
你能否建议一些更好的方法在R中执行这项任务?
给定一个初始日期,我想生成一个月度间隔的日期序列,确保每个元素与初始日期或月份的最后一天具有相同的日期,以防同一天产生无效日期.
听起来很标准,对吧?
使用difftime是不可能的.这是帮助文件的difftime说法:
诸如"月"之类的单位是不可能的,因为它们不是恒定的长度.要创建月,季度或年的间隔,请使用seq.Date或seq.POSIXt.
但随后查看seq.POSIXt我的帮助文件,发现:
使用"月份"首先提前一个月而不更改日期:如果这导致该月的无效日期,则向前计入下个月:请参阅示例.
这是帮助文件中的示例.
seq(ISOdate(2000,1,31), by = "month", length.out = 4)
> seq(ISOdate(2000,1,31), by = "month", length.out = 4)
[1] "2000-01-31 12:00:00 GMT" "2000-03-02 12:00:00 GMT"
"2000-03-31 12:00:00 GMT" "2000-05-01 12:00:00 GMT"
Run Code Online (Sandbox Code Playgroud)
因此,鉴于初始日期是在第31天,这将在2月,4月等产生无效日期.因此,序列最终实际上跳过那些月份,因为它"向前计数"并最终在3月02日结束,而不是二月-29.
如果我从2000-01-31开始,我希望序列如下:
它应该正确处理闰年,所以如果初始日期是2015-01-31,那么序列应该是:
这些只是用来说明问题的例子,我不提前知道初始日期,也不能假设它.初始日期可能在月中(2015-01-15),在这种情况下seq工作正常.但是,正如在示例中那样,在月末使用seq单独使用会产生问题(第29,30和31天)也是如此.我不能假设初始日期是该月的最后一天.
我环顾四周试图寻找解决方案.在SO中的一些问题中(例如这里)有一个"技巧"来获得一个月的最后一天,通过获取下个月的第一天并简单地减去1.并且找到第一天是"容易的",因为它就在第一天.
所以到目前为止我的解决方案是
# Given an initial date for my sequence
initial_date <- as.Date("2015-01-31")
# Find the first day of …Run Code Online (Sandbox Code Playgroud) 做这样的演员的好方法和工作方式是什么?
seq { yield (box "key", box "val") }
|> Seq.cast<string*string>
Run Code Online (Sandbox Code Playgroud)
因为这看起来非常难看:
seq { yield (box "key", box "val") }
|> Seq.map (fun (k,v) -> k.ToString(), v.ToString())
Run Code Online (Sandbox Code Playgroud)
除此之外:
seq { yield (box "key", box "val") }
|> Seq.map (fun (k,v) -> unbox<string>(k), unbox<string>(v))
Run Code Online (Sandbox Code Playgroud)
有没有办法将元组"拆箱"成另一个元组?
我读到使用seq_along()可以更好地处理空的情况,但这个概念在我的脑海中并不是那么清晰。
例如,我有这个数据框:
df
a b c d
1 1.2767671 0.133558438 1.5582137 0.6049921
2 -1.2133819 -0.595845408 -0.9492494 -0.9633872
3 0.4512179 0.425949910 0.1529301 -0.3012190
4 1.4945791 0.211932487 -1.2051334 0.1218442
5 2.0102918 0.135363711 0.2808456 1.1293810
6 1.0827021 0.290615747 2.5339719 -0.3265962
7 -0.1107592 -2.762735937 -0.2428827 -0.3340126
8 0.3439831 0.323193841 0.9623515 -0.1099747
9 0.3794022 -1.306189542 0.6185657 0.5889456
10 1.2966537 -0.004927108 -1.3796625 -1.1577800
Run Code Online (Sandbox Code Playgroud)
考虑这三个不同的代码片段:
# Case 1
for (i in 1:ncol(df)) {
print(median(df[[i]]))
}
# Case 2
for (i in seq_along(df)) {
print(median(df[[i]]))
} …Run Code Online (Sandbox Code Playgroud) 假设我有一个值案例类
case class Id(i:Int) extends AnyVal
Run Code Online (Sandbox Code Playgroud)
以及包含此值case类的序列
Seq(Id(1), Id(2), Id(3))
Run Code Online (Sandbox Code Playgroud)
是否有一种方法可以将这些值转换Int为不需要迭代序列(例如通过执行Seq(Id(1), Id(2), Id(3)).map(_.i)?
我问的原因是我认为值case case类的优点在于你可以使用在运行时具有本机类型作为表示的值类,因此非常有效.但并非所有使用的库都支持这些类的自动"转换".因此,当它是一个简单的属性时,必须传递本机类型,因为编译器可以优化它.但是当有一个序列时我必须显式地映射它,这意味着在所有值上发生了不必要的迭代,因为它实际上什么也没做,只是在运行时映射到相同的值.有没有办法避免这种情况,并在这种情况下使用编译器的一些优化?
它有一个欺骗性的简单代码:
method match(Any:U: |) { self.Str; nqp::getlexcaller('$/') = Nil }
Run Code Online (Sandbox Code Playgroud)
但是,这是它的行为:
(^3).match(1) # OUTPUT: «?1??»
Run Code Online (Sandbox Code Playgroud)
到现在为止还挺好.
say (1,3 ... * ).match(77); # OUTPUT: «Nil?»
Run Code Online (Sandbox Code Playgroud)
Ooookey.现在发生了什么?
say (1,3 ... * ).match(1); # OUTPUT: «Nil?»
say (1,3 ... * ).match(/\d/); # OUTPUT: «Nil?»
Run Code Online (Sandbox Code Playgroud)
不喜欢序列.
say (^10).match(/\d/); # OUTPUT: «?0??»
Run Code Online (Sandbox Code Playgroud)
好的,再次有意义.
say <a b c>.match(/\w/); # OUTPUT: «?a??»
Run Code Online (Sandbox Code Playgroud)
恢复正常.它不喜欢Seqs吗?我假设,因为我查看了其他类的代码并且match没有重新实现,所有这些代码都调用了代码.但是我没有看到如何返回字符串并从NPQ设置变量,或者为什么它不能用于序列.
var seq = Seq[String]()
seq = seq :+ "hello"
var set = Set[String]()
set += "hello"
Run Code Online (Sandbox Code Playgroud)
Seq和Set之间有什么区别?
假设我有一个seq,如果有任何元素或None其他元素,我想返回最大的。F# 似乎没有这个内置。
这是我的尝试:
let tryMax xs =
if Seq.isEmpty xs
then
None
else
Seq.max xs |> Some
let tryMin xs =
if Seq.isEmpty xs
then
None
else
Seq.min xs |> Some
Run Code Online (Sandbox Code Playgroud)