我正在分析一个在零附近变化的系列.并且看看该系列的哪些部分倾向于大多数是积极的或者大部分是负面的,我正在策划一个geom_smooth
.我想知道是否有可能使平滑线的颜色取决于它是否高于或低于0.以下是一些产生图形的代码,就像我想要创建的一样.
set.seed(5)
r <- runif(22, max = 5, min = -5)
t <- rep(-5:5,2)
df <- data.frame(r+t,1:22)
colnames(df) <- c("x1","x2")
ggplot(df, aes(x = x2, y = x1)) + geom_hline() + geom_line() + geom_smooth()
Run Code Online (Sandbox Code Playgroud)
我考虑计算平滑值,将它们添加到df然后使用a scale_color_gradient
,但我想知道是否有办法ggplot
直接实现这一点.
是否可以通过微基准评估包含多行代码的代码块?如果是这样,怎么办?
示例:在字符列中有一些数字数据:
testdata <- tibble::tibble(col1 = runif(1000), col2 = as.character(runif(1000)), col3 = as.character(runif(1000)))
Run Code Online (Sandbox Code Playgroud)
现在我们可以尝试不同的方式来转换它们。我们可以在列上直接调用as.numeric:
testdata$col2 <- as.numeric(testdata$col2)
testdata$col3 <- as.numeric(testdata$col3)
Run Code Online (Sandbox Code Playgroud)
我们可以尝试在dplyr
mutate中进行操作:
testdata <- dplyr::mutate(testdata, col2 = as.numeric(col2),
col3 = as.numeric(col3))
Run Code Online (Sandbox Code Playgroud)
或者,也许我们知道所有列都应为数字,所以我们可以尝试使用不太明确的方法进行检查:
testdata <- dplyr::mutate_if(testdata, .predicate = is.character, .funs = as.numeric)
Run Code Online (Sandbox Code Playgroud)
现在我们要比较这三个选项的性能。
后两个选项是单独的调用,因此可以在微基准测试中轻松测试它们,但是第一个选项包括两个单独的调用。我们可以将两个调用包装在一个函数中,然后在微基准测试中对其进行评估,但这会引入该函数的少量开销,因此从技术上讲,我们不在评估我们现在拥有的解决方案。我们可以将调用分别包含在微基准中,然后将它们加起来,因为平均值应该可以,但是对于最小值或最大值之类的东西,不一定能得出明智的结果。
微基准测试文档中的示例大多使用简单的单个表达式,并且经常使用简单的函数来包装代码。
是否可以将多行代码直接输入到微基准中以便一起评估?