我想生成类似于10, 7, 4, 1
seq函数无法做到这一点(开始大于停止)。什么函数可以做到这一点?我不喜欢循环我的序列(这将非常耗时,因为我需要像这样处理大量向量)。
> seq(10, 0, by=3)
Run Code Online (Sandbox Code Playgroud)
seq.default(10, 0, by = 3) 中的错误:“by”参数中的符号错误
我编写了一个小型控制台应用程序,可以在不使用任何可变变量的情况下更新类型记录。对于经验丰富的函数式程序员来说,这看起来很简单,但对我来说却是一项艰巨的工作。它有效,但有一件事我不满意。但在此之前,让我们从代码开始:
open System
//------------------------------------------------------------------------------------
// Type, no data validation to keep it simple
//------------------------------------------------------------------------------------
[<StructuredFormatDisplay("{FirstName} {LastName} is a {Age} year old {Sex}")>]
type Student = {
FirstName: string
LastName : string
Sex : char
Age: int
}
//------------------------------------------------------------------------------------
// I/O functions
//------------------------------------------------------------------------------------
let getConsoleChar message =
printf "\n%s" message
Console.ReadKey().KeyChar
let getConsoleString message =
printf "\n%s" message
Console.ReadLine()
let getConsoleInt = getConsoleString >> Int32.Parse //no tryparse to keep it simple, I'm sure you can type an integer
let isValidCommand command …Run Code Online (Sandbox Code Playgroud) 我们说吧
for i in {1..9}
do
if test $i -ne 8
then
echo $i
fi
done
Run Code Online (Sandbox Code Playgroud)
如果有一种方法可以从这个序列中跳过8号{1..9}而不进行比较?
PS: GNU bash,版本3.00
看看这两个线程之后:F#是否与Haskell相同?,从F#中的N个不同索引的序列中取N个元素 ,我一直想知道在列表上使用序列运算符的最佳方法,甚至是使用它们.
我现在是F#的新手,我正在编写一个程序,它必须处理从HtmlAgilityPack获得的大量序列.在Seq模块中有一些有趣的运算符,但正如那些线程所述,它可能与性能有关,如果我们不得不在seq - > list之间不断转换,它也会使代码混乱,而不是解决问题的东西.这就是我开始学习F#的原因.
一个简单的例子是当我需要取一个列表的'N'个元素时:
listOfRows
|> Seq.take 2
// Now I don't have a list anymore, it returns a sequence
|> List.ofSeq
Run Code Online (Sandbox Code Playgroud)
那么,任何人都可以了解处理这些情景的最佳方法吗?我可以使用Seq.take和Seq.skip来处理解决方案,但这已知效率非常低.另一方面,将功能内置到标准库中并且必须重新实现它以在不同集合上使用相同的概念,或者通过显式转换使代码更脏,这是一种耻辱.
我怎么能看到'list - > seq'和'seq - > list'之间每次转换对性能的影响?
非常感谢.
我在我的模拟shell脚本中经常使用seq.Git bash不提供它,因此我正在寻找替代方案.
是否有替代方案seq是Git bash支持的命令的一部分?
当前解决方案:根据Ignacio的回答,我编写了一个小帮助脚本,为我的遗留脚本提供了一个简单的seq功能.我还注意到,当使用echo {1..10}变量时,您需要使用eval获取序列输出而不是未扩展的表达式:
a=0; b=5
eval echo {$a..$b} # outputs 0 1 2 4 5
echo {$a..$b} # outputs {0..5}
Run Code Online (Sandbox Code Playgroud)
这是我的新篇章seq.sh:
#!/bin/bash
# check for the real seq and export a new seq if not found
# import this script via `source ./seq.sh`
#
hasSeq(){
which seq >/devnull 2>&1
}
mySeq(){
case $# in
1) eval echo {1..$1};;
2) eval echo {$1..$2};; …Run Code Online (Sandbox Code Playgroud) 我想知道如何生成从0到100的自动化序列,数字每个只有5个位置,其余的都应该是NA值.最后我想有这样的事情:
> labCol
[1] 0 NA NA NA NA 5 NA NA NA NA 10 NA NA NA NA 15 NA ..... 100
Run Code Online (Sandbox Code Playgroud)
我像这样手动完成了这个例子,但是很耗时:
labCol <- c(0, NA, NA, NA, NA, 5, NA, NA, NA, NA, 10, NA, NA, NA, NA, 15, NA, ... 100 )
Run Code Online (Sandbox Code Playgroud)
我无法在seq()函数中找到一个选项来执行此操作.
这个问题是因为我正在使用包的功能heatmap.2()进行热图gplots,并且列标签太靠近了.我也不能每5或10个位置设置标签.这就是为什么我需要使用NA值生成我自己的标签序列以避免这种重叠.
欢迎任何建议:)
我有以下数据帧:
AllDays
2012-01-01
2012-01-02
2012-01-03
...
2015-08-18
Leases
StartDate EndDate
2012-01-01 2013-01-01
2012-05-07 2013-05-06
2013-09-05 2013-12-01
Run Code Online (Sandbox Code Playgroud)
我想要做的是,对于allDays数据帧中的每个日期,计算有效的租约数量.例如,如果有4个租约的开始日期<= 2015-01-01和结束日期> = 2015-01-01,那么我想在该数据帧中放置一个4.
我有以下代码
for (i in 1:nrow(leases))
{
occupied = seq(leases$StartDate[i],leases$EndDate[i],by="days")
occupied = occupied[occupied < dateOfInt]
matching = match(occupied,allDays$Date)
allDays$Occupancy[matching] = allDays$Occupancy[matching] + 1
}
Run Code Online (Sandbox Code Playgroud)
这是有效的,但由于我有大约5000个租约,它需要大约1.1秒.有没有人有更有效的方法需要更少的计算时间?利息日仅为当前日期,仅用于确保未计入未来的租赁日期.
在这篇SO 帖子中,添加
inSeq
|> Seq.length
|> printfn "%d lines read"
Run Code Online (Sandbox Code Playgroud)
导致inSeq中的延迟序列被读入.
好的,我已经扩展了该代码,并希望首先打印出该序列(请参阅下面的新程序).
当Visual Studio(2012)调试器到达时
inSeq |> Seq.iter (fun x -> printfn "%A" x)
Run Code Online (Sandbox Code Playgroud)
读取过程重新开始.当我inSeq使用调试器检查时,inSeq似乎没有元素.
如果我有第一个阅读元素inSeq,我怎么能看到(检查)这些元素,为什么它们不打印出来Seq.iter?
open System
open System.Collections.Generic
open System.Text
open System.IO
#nowarn "40"
let rec readlines () =
seq {
let line = Console.ReadLine()
if not (line.Equals("")) then
yield line
yield! readlines ()
}
[<EntryPoint>]
let main argv =
let inSeq = readlines ()
inSeq
|> Seq.length
|> printfn …Run Code Online (Sandbox Code Playgroud) 我想弄明白:
如果scala.collection.Seq.groupBy()保留订单.意思是如果我有List((true, 2), (true, 8)),并且通过第一个元素(布尔值)进行groupBy,我总是会得到一个true的列表,它在8之前有2个.
toMap的相同问题.这意味着如果我在提到的列表上执行toMap,我是否总是最终得到8为真关键,因为8在2之后出现并覆盖它?
我在scala doc中找不到任何有关实现的内容:scala doc.我正在尝试决定是否编写自己的版本以确保订单得到保留.
谢谢!
n是一个整数.我想要的顺序是:
1:n, 1:(n-1), 1:(n-2), ... , 1:3, 1:2, 1
Run Code Online (Sandbox Code Playgroud)
编者注:
在R中,1:n-1不同于1:(n-1).小心.