这是我的功能
> df
# A tibble: 11 x 2
alpha ar1
<dbl> <list>
1 -0.5 <S3: ts>
2 -0.4 <S3: ts>
3 -0.3 <S3: ts>
4 -0.2 <S3: ts>
5 -0.1 <S3: ts>
6 0.0 <S3: ts>
7 0.1 <S3: ts>
8 0.2 <S3: ts>
9 0.3 <S3: ts>
10 0.4 <S3: ts>
11 0.5 <S3: ts>
> df$ar1 %>% lapply(head)
[[1]]
[1] -0.3514397 0.6665273 0.1932043 -0.5509680 -0.5857840 -0.6412465
[[2]]
[1] -1.3324151 0.9639404 -1.2454844 0.1048227 -0.4667547 1.2749614
[[3]]
[1] -0.2049486 -0.5751628 0.4895776 0.1538311 2.0552770 -1.3351100
[[4]]
[1] -0.1118248 0.4838552 2.7614692 -0.7824381 0.5151733 2.2416832
[[5]]
[1] 1.7293663 0.5335523 -0.4605581 -0.7785337 0.7875933 -0.8702821
[[6]]
[1] 1.15512596 -1.14722217 0.44119379 0.03748791 0.03285100 -0.05754903
[[7]]
[1] 0.5513116 1.4185419 -0.7616093 1.5258314 1.7186733 -0.9435652
[[8]]
[1] -1.0346102 -1.9515274 0.3263094 -0.9846696 -0.1100608 1.2949033
[[9]]
[1] 1.3427732 0.8074878 -2.0393332 -0.0580785 0.9315681 1.1272597
[[10]]
[1] 1.5801751 0.6694740 0.3058637 -0.8653836 0.3402794 1.3181050
[[11]]
[1] 1.7001214 2.8050716 0.6580970 3.0519142 2.3411307 -0.6577423
它还没有完成,但是我无法理解为什么我一直在助手([b :: hd])的标题中得到错误。我已经尝试过helper(b :: hd)或helper(b :: hd :: []),但都会出现错误。我如何才能使其有效?
答案 0 :(得分:2)
使用function getTimeZone(){
var now = new Date().toString();
var timeZone = now.replace(/.*[(](.*)[)].*/,'$1');//extracts timezone string
return timeZone;
}
时,您将为函数的参数提供模式。但是您已经有一个名为function
的参数。所以这个函数inputList
期待两个参数(但忽略了第一个参数)。
您可以通过删除helper
来解决此问题。
您对inputList
的第一次递归调用也遇到问题。您的表达式helper
是一个列表列表。我怀疑你想要更像[b :: hd]
这里的东西。
至少还有一个问题,但我希望这有助于您入门。
答案 1 :(得分:1)
这里有多个错误。一个是关键字function
意味着我们有一个隐含的参数,我们正在使用它。因此模式匹配发生在“不可见”参数上。但在这里你可能明确定义了一个:inputList
。所以我们可以删除那个:
let rec helper = function
| [] -> []
| a :: b :: hd -> if a = b then helper ([b::hd]) else a :: helper (b:: hd)
接下来是类型有问题:在递归中,你使用:
helper ([b::hd])
;和a :: helper (b:: hd)
但是你把它们放在同一条线上,这没有任何意义,因为第一个传递元素列表列表,第二个传递元素列表。因此,第一个结果将是元素列表的列表,第二个结果是元素列表。合并这些是没有意义的。
如果我理解你要确保不会出现两个相同的连续元素,那么我们应该将它重写为:
let rec helper = function
| [] -> []
| a :: b :: hd -> if a = b then helper (b::hd) else a :: helper (b:: hd)
您在此处定义了两种模式:
第二个将在列表b :: hd
的尾部执行递归。这意味着最终当我们传递一个包含 n 元素的列表时,它将递归地处理带有 n-1 元素的列表, n-2 元素等。但最终它将有一个元素。而且没有这种情况。所以我们需要为一个元素模式添加一个案例:
let rec helper = function
| [] -> []
| h :: [] -> h :: []
| a :: b :: hd -> if a = b then helper (b::hd) else a :: helper (b:: hd)