标签: seq

当谓词计算为true时,F#停止Seq.map

我正在以类似的方式生成序列:

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)

所以我需要:

  1. 一种在其中一个映射步骤产生映射时停止映射的方法 Error
  2. 将错误作为添加到序列的最后一个元素的方法

我很欣赏可能有一个不同的序列方法,除此之外map,我会对F#不熟悉并且在线搜索还没有产生任何东西!

f# map seq

6
推荐指数
1
解决办法
535
查看次数

在Nim中清除序列

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实例?

clear seq nim-lang

6
推荐指数
1
解决办法
646
查看次数

在r中为每个组创建日期序列

我有一个如下所示的数据集:

      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中执行这项任务?

r date seq dplyr

6
推荐指数
1
解决办法
3664
查看次数

每月日期的顺序,确保它是同一天,或在无效的情况下的最后一天

给定一个初始日期,我想生成一个月度间隔的日期序列,确保每个元素与初始日期或月份的最后一天具有相同的日期,以防同一天产生无效日期.

听起来很标准,对吧?

使用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开始,我希望序列如下:

  • 2000-01-31
  • 2000-02- 29
  • 2000年3月31日
  • 2000-04-30
  • ...

它应该正确处理闰年,所以如果初始日期是2015-01-31,那么序列应该是:

  • 2015年1月31日
  • 2015-02- 28
  • 2015年3月31日
  • 2015年4月30日
  • ...

这些只是用来说明问题的例子,我不提前知道初始日期,也不能假设它.初始日期可能在月中(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)

r seq

6
推荐指数
1
解决办法
1032
查看次数

Seq.cast元组值从obj到string

做这样的演员的好方法和工作方式是什么?

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)

有没有办法将元组"拆箱"成另一个元组?

f# boxing casting tuples seq

6
推荐指数
1
解决办法
86
查看次数

使用 seq_along() 处理空情况

我读到使用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)

r seq is-empty

6
推荐指数
1
解决办法
1362
查看次数

将AnyVal案例类(Seq [T <:AnyVal])的序列有效地转换为其运行时表示

假设我有一个值案例类

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类的优点在于你可以使用在运行时具有本机类型作为表示的值类,因此非常有效.但并非所有使用的库都支持这些类的自动"转换".因此,当它是一个简单的属性时,必须传递本机类型,因为编译器可以优化它.但是当有一个序列时我必须显式地映射它,这意味着在所有值上发生了不必要的迭代,因为它实际上什么也没做,只是在运行时映射到相同的值.有没有办法避免这种情况,并在这种情况下使用编译器的一些优化?

scala seq value-class

6
推荐指数
1
解决办法
69
查看次数

Any.match有什么作用?

它有一个欺骗性的简单代码:

 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设置变量,或者为什么它不能用于序列.

match stringification perl6 seq

6
推荐指数
1
解决办法
117
查看次数

Scala中Seq和Set之间的区别是什么

var seq = Seq[String]()
seq = seq :+ "hello"

var set = Set[String]()
set += "hello"
Run Code Online (Sandbox Code Playgroud)

Seq和Set之间有什么区别?

scala set seq

5
推荐指数
2
解决办法
6427
查看次数

在 F# 中执行 tryMax 和 tryMin 的最佳方法?

假设我有一个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)
  • 这种方法有什么问题吗?
  • 是否有内置的解决方案?

f# seq

5
推荐指数
2
解决办法
143
查看次数

标签 统计

seq ×10

f# ×3

r ×3

scala ×2

boxing ×1

casting ×1

clear ×1

date ×1

dplyr ×1

is-empty ×1

map ×1

match ×1

nim-lang ×1

perl6 ×1

set ×1

stringification ×1

tuples ×1

value-class ×1