问题标签 [nse]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
r - 在 dplyr 中使用参数作为 col 名称
我正在努力使用参数和直接从数据框中混合引用列名。请帮我更正第二个函数以返回与第一个函数相同的结果
r - 在 dplyr::case_when 中使用 NSE
我已经阅读了Programming with dplyr文档并尝试编写一个简单的函数来包装该case_when()
函数。
我希望新列c
andd
将基于 and 中的值创建a
,b
但它们只是NA
and 0
。任何想法为什么会这样?
干杯。
r - 如何使用整洁的评估语义选择、复制和重命名 tibble 中的多个列?
我想在我的 tibble 中复制一组变量,以便我可以在下游评估中拥有variable_unmodified
和variable
值。我想出了一个使用旧式下划线 NSEselect_()
函数和的 hacky 版本.dots
,但想使用更新的 NSE 方法的整洁评估语义。
这就是我想要的:
输出:
但是,如果我尝试使用select()
and来执行此操作!!
,.dots
则无法按预期工作:
列未按需要命名:
这样做的正确方法是什么?unparsed_names
此外,避免定义为单独变量的奖励积分......
r - 具有 dplyr 的用户定义函数 - 基于组合参数改变列
我正在使用以下示例数据开发一个闪亮的应用程序:
这使:
我想创建一个用户定义的函数,允许选择分数类型(例如Score1
,Score2
或Score3
),开始年份(year_from
)和结束年份(year_to
),并计算年份之间的差异。例如,选择Score1
、2015
和2016
将给出:
我已经阅读了有关使用编程dplyr
的文档,但对使用quosures
. 尝试以下公式失败:
这会产生错误:Error in !older.name : invalid argument type
如果我省略mutate(Diff = !!recent.name - !!older.name)
,则函数的其余部分有效,但我确实需要公式中的差异计算。
r - dplyr::mutate 取消引用 RHS
我想知道如何正确地UQ
在 RHS 上dplyr
以mutate
. 请参阅我在wilcox.test
此 MWE 部分的评论中收到的错误消息:
我猜!!(qcol) ...
它被解释为我想取消引用整个表达式,而不仅仅是变量名,这就是它找不到的原因base
?我还发现(!!qcol)
返回字符串本身,因此-
操作员无法处理它也就不足为奇了。
r - - 使用非标准评估收集操作员
我想编写一个函数,它将 quosure 作为参数,附加-
到 quosure,并将其传递给gather
,如下所示:
这显然是因为我需要将 quosure 的每个元素-
附加到 ,而不是将整个 quosure 附加到-
。但在我的工作中,以 - 的形式创建这个 quosure 并不容易,quos(-mpg, -cyl, -disp)
那么我该如何修改quos(mpg, cyl, disp)
以添加-
?
我希望看到与 相同的结果gather(mtcars, key = k, value = v, -mpg, -cyl, -disp)
,其中前 3 行是
这里有一个类似的问题,但没有答案,似乎没有处理quos()
而不是的问题quo()
。
r - 在 dplyr 函数中访问新变量
我正在编写一个函数来计算需要使用 dplyr 和 tidyr 进行 NSE 评估的计数表的优势比。显而易见,这是我第一次进入 NSE 世界。
例如,使用数据框“foo”:
我首先做计数: foo2 <- foo %>% count(strata, group, select)
接下来,我使用 tidyr 的 unite and spread 折叠成宽格式,它通过组的值命名新列并选择列:
最后,我计算一个新列,或者为
要将此代码放入函数中,我使用 enquo 和 !! 处理原始列,但要计算新列,或者,我需要新创建的列(由组和选择列的值的串联命名)。问题是如何“取消引用” OR 计算的名称?
我当前的草稿在联合/传播之后保存中间结果,将名称放入向量中,并使用 $`!!'() 运算符。这感觉很笨拙。更好的方法?
我的功能:
我的原始数据框 'foo' :
r - 在 R 中的函数中创建和使用新变量:tidyverse 中的 NSE 编程错误
在阅读并重新阅读了许多“使用 dplyr 编程”指南之后,我仍然找不到解决我的特殊情况的方法。
我知道 tidyverse 函数的使用group_by_
和mutate_
这种“字符串友好”版本正在走向弃用,这enquo
就是要走的路。
但是,我的情况有些不同,我正在努力寻找一种整洁的方式来解决它。
事实上,我的目标是在函数中创建和操作数据框。基于其他变量创建(变异)新变量,使用它们等。
但是,无论我多么努力,我的代码要么出错,要么在检查包时返回一些警告,例如no visible binding for global variable ...
.
这是一个可重现的示例:
这是我想要做的:
一些常见的 dplyr 操作,其预期结果应该是:
我希望这段代码在函数中安静地工作。以下是我处理非 NSE 问题的最佳尝试:
不幸的是,我仍然收到以下消息:
有没有办法解决它?非常感谢!
编辑:我正在使用 R 3.4.1、dplyr_0.7.4、tidyr_0.7.2 和 tidyverse_1.1.1
回答
感谢我设法解决它的评论,这是可行的解决方案:
多谢 :)
r - dplyr:如何在 `bind_rows` 中取消引用?
我令人惊讶的新体验dplyr
是,如果我对tibble
s 进行涉及取消引号(!!x
或rlang::UQ(x)
)的各种操作,然后将它们分配给变量并最终将它们合并,bind_rows
一切正常;而嵌入的相同操作bind_rows
会因一些错误而失败。更令人困惑的是,错误并不总是相同的:我得到了quote(x) must resolve to integer column positions, not formula
(this is with select
and mutate
)和Column quote(x) is of unsupported type quoted call
(this with group_by
)。我想知道这种行为背后的原因是什么,我做错了什么还是这是一个错误?
r - R for 循环中的非标准评估:包含 dplyr 汇总的函数中未引用的输入变量始终返回 NA,但过滤器函数有效
简短的摘要
dplyr 取消引用作为函数的参数失败,summarise
其中引用的对象是使用的函数的参数summarise
,并且该参数在 for 循环中分配。
循环
功能(此处略,下图)
长总结
我有两列有时包含 NA,我想使用dplyr 非标准评估及其著名的取消引用(AKA bang bang !!
)在一个 for 循环中总结每一列。
我们在下面看到 filter 函数可以很好地处理取消引用 (!!) 但 summarise 函数失败,返回“argument is not numeric or logical”错误。当我:=
在“使用 dplyr 编程”小插图中使用 summarise 函数调用(此处未显示)时,也会发生同样的情况。最后,我确认了函数中的类是数字的。!!sumvar
chkfunc