【发布时间】:2019-05-15 02:10:58
【问题描述】:
以下代码将过滤同位素组合表,以识别只有一种元素富含同位素的组合。
df <- tibble::tibble(
C12 = rep(c(2:0), 2),
C13 = rep(c(0:2), 2),
H1 = rep(c(0, 1), each = 3),
H2 = rep(c(1, 0), each = 3)
)
element_filter <- "H2"
dplyr::filter_at(df, dplyr::vars(element_filter), dplyr::all_vars(. == 0))
我想将此代码包含在一个包中并避免出现no visible binding for global variable ‘.’ 警告。当我将filter_at 调用更改为
dplyr::filter_at(df, dplyr::vars(element_filter), dplyr::all_vars(.data == 0))
我收到以下错误,Error: (list) object cannot be coerced to type 'double'。我在其他功能中成功使用了.data 代词,但我无法弄清楚如何让它在这里工作。感谢您的帮助。
【问题讨论】:
-
dplyr::filter_at(df, dplyr::vars(element_filter), dplyr::all_vars(. == 0))为我工作,没有任何警告。R version 3.5.2 -
同意发布的代码有效,但是当尝试更改为
dplyr::filter_at(df, dplyr::vars(element_filter), dplyr::all_vars(.data == 0))时,它不起作用。这是为什么呢? -
hmmm..我不确定,但可能是因为
all_vars不期望.data参数??all_vars表示它希望输入为expr。虽然我在这里解释可能错了。 -
您的示例只需
filter即可完成。是否存在表格中包含两种以上不同化学元素的情况?此外,您是否只需要仅存在一种同位素富集的元素,还是仅存在一种同位素富集的元素? -
这两点都是。
expression_filter是根据用户提供的分子式确定的,该分子式还可以包括 N、O、S 及其同位素以及指示哪些元素可标记的参数。