奇怪的行为:
data(iris)
library(condformat)
#library(knitr)
df <- iris[c(1:5,70:75, 120:125),]
cd <- condformat(df)
cd <- rule_text_bold(cd, 2, df[,2] == apply(df[,2:3], 1, FUN=min))
cd <- rule_text_bold(cd, 3, df[,3] == apply(df[,2:3], 1, FUN=min))
cd
生成正确的输出,其中第 2 行和第 3 行中的最小值以粗体显示。
但是当我切换到 for 循环时:
data(iris)
library(condformat)
#library(knitr)
df <- iris[c(1:5,70:75, 120:125),]
cd <- condformat(df)
for (j in 2:3){
cd <- rule_text_bold(cd, j, df[,j] == apply(df[,2:3], 1, FUN=min))
}
cd
它坏了。只有一列突出显示。为什么?我需要对大型表格执行此操作,并且需要循环!
答案1
也许这个问题更适合放在 stackoverflow 上。
无论如何,condformat 的工作方式是捕获表达式并在需要渲染时对其进行评估,类似于 ggplot2 所做的。这是使用一种称为非标准评估 (NSE) 的技术完成的,利用该rlang
包。
您可以在这里阅读有关 NSE 的更多信息:https://dplyr.tidyverse.org/articles/programming.html
rlang 提供了一个名为“bang-bang”的取消引用运算符!!
。此运算符允许用户取消引用表达式的某些部分,以用变量的值替换它们。
例如,请参见!!
下面的示例中如何使用运算符来替换的值j
:
data(iris)
library(condformat)
#library(knitr)
df <- iris[c(1:5,70:75, 120:125),]
cd <- condformat(df)
for (j in 2:3){
cd <- rule_text_bold(cd, !!j, df[,!!j] == apply(df[,2:3], 1, FUN=min))
}
cd
在 condformat 0.8.0 上,由于 rlang 包最近更新,您可能会在每个会话中看到一次警告。该警告不会出现在下一个版本中(目前在 GitHub 上)。