小编Cap*_*ous的帖子

为什么sapply不能使用lubridate的parse_date_time而lapply却不使用?

给定:一个简单的4x2数据帧,其中填充了字符类型的数据

目标:相同的数据框,但所有值均替换为对它们应用以下lubridate函数调用的结果: parse_date_time(df, orders = c ("ymd_hms", "mdy_hms"), tz = "ETZ")

似乎使用lapply可以正常工作。使用sapply时,parse_date_time函数返回奇怪的大整数。

数据如下:

df <- as.data.frame(stringsAsFactors = FALSE, matrix(c("2014-01-13 12:08:02", "2014-01-13 12:19:46", "2014-01-14 09:59:09", "2014-01-14 10:05:09", "6-18-2016 17:43:42", "6-18-2016 18:06:59", "6-27-2016 12:16:47", "6-27-2016 12:29:05"), nrow = 4, ncol = 2, byrow = TRUE))

colnames(df) <- c("starttime", "stoptime")

这是sapply调用:

df2 <- sapply(df, FUN = function(column) { parse_date_time(column, orders = c("ymd_hms", "mdy_hms"), tz = "ETZ") })

和讨厌的电话:

df2 <- lapply(df, FUN = function(column) { parse_date_time(column, orders = c("ymd_hms", "mdy_hms"), tz = "ETZ") …

r lapply sapply lubridate

4
推荐指数
1
解决办法
277
查看次数

为什么 () =&gt; () 不是 Nothing =&gt; () 的子类型

在 scala 中,函数的输出类型是协变的,输入类型是逆变的。

例如,如果Dog是 的子类型Animal,则

T => Dog是 的子类型T => Animal,并且 Animal => T是 的子类型Dog => T

换句话说, 的生产者Dog可以前往 的生产者Animal期望的地方,而 的消费者Animal可以前往 的消费者Dog期望的地方。

那么为什么我会收到这个编译错误:

def useF(f: Nothing => Unit): Unit = ()
def f(x: Unit): Unit = ()
useF(f) // ok
useF(() => ()) // error

/*
example.scala:4: error: type mismatch;
 found   : () => Unit
 required: Nothing => Unit
useF(() => ())
*/ …
Run Code Online (Sandbox Code Playgroud)

scala covariance higher-order-functions unit-type bottom-type

4
推荐指数
1
解决办法
64
查看次数