假设我想将tibble中的所有列相加以创建一个名为“total”的新列。我能做到:
myfun <- function(Df){
apply(Df, 1, sum)
}
# Works fine
Df %>% mutate(total = myfun(.))
我可以像这样制作一个辅助函数,
myfun
但是,假设这个dplyr
通常会以这种方式使用,即在myfun
动词函数中,然后是“。”。引用数据框是多余的,如果myfun2 <- function(Df=.){
apply(Df, 1, sum)
}
函数可以用默认值替换它,那就太好了。我想要这样的事情:
Df %>% mutate(total = myfun2())
Error in mutate_impl(.data, dots) :
Evaluation error: object '.' not found.
哪个不起作用。
Df
因为我甚至不确定“。”工作,我不认为我可以更好地表达问题,但基本上,我想知道是否有一种说法,实际上,如果myfun2
中没有定义<script>
$(document).ready(function() {
var max_fields = 10; //maximum input boxes allowed
var wrapper = $(".input_fields_wrap"); //Fields wrapper
var add_button = $(".add_field_button"); //Add button ID
var x = 1; //initlal text box count
$(add_button).click(function(e){ //on add input button click
e.preventDefault();
if(x < max_fields){ //max input box allowed
x++; //text box increment
$(wrapper).append('<div><input type="text" name="parameter_value" size="50" style="width: 50%;; margin-left: 3%;" class="headers " value="${workflow.parameter_value}" /> <a href="#" class="remove_field bttn">Remove</a></div>'); //add input box
}
});
$(wrapper).on("click",".remove_field", function(e){ //user click on remove text
e.preventDefault(); $(this).parent('div').remove(); x--;
});
});
</script>
<table>
<tr>
<td class="tbody_color">
<div class="input_fields_wrap">
<c:if test="${not empty workflow.workflowParametersList}">
<c:forEach var="paramValue" items="${workflow.workflowParametersList}">
<input type="text" name="parameter_value" size="50" style="width: 50%;; margin-left: 13%;" class="headers" value="${paramValue.param_value}"></input>
<button class="add_field_button bttn">Add Parameters</button>
</c:forEach>
</c:if>
<c:if test="${empty workflow.workflowParametersList}">
<input type="text" name="parameter_value" size="50" style="width: 50%;; margin-left: 13%;" class="headers" value=""></input>
<button class="add_field_button bttn">Add Parameters</button>
</c:if>
</div>
</td>
</tr>
</table>
,请获取数据框通常由“。”引用?
答案 0 :(得分:3)
一个选项是quote
该功能,然后使用!!
library(tidyverse)
myfun <- function() {
quote(reduce(., `+`))
}
r1 <- Df %>%
mutate(total = !! myfun())
r1
# A tibble: 10 x 5
# p_1 p_2 q_1 q_2 total
# <dbl> <dbl> <dbl> <dbl> <dbl>
# 1 1.37 1.30 -0.307 0.455 2.82
# 2 -0.565 2.29 -1.78 0.705 0.645
# 3 0.363 -1.39 -0.172 1.04 -0.163
# 4 0.633 -0.279 1.21 -0.609 0.960
# 5 0.404 -0.133 1.90 0.505 2.67
# 6 -0.106 0.636 -0.430 -1.72 -1.62
# 7 1.51 -0.284 -0.257 -0.784 0.186
# 8 -0.0947 -2.66 -1.76 -0.851 -5.37
# 9 2.02 -2.44 0.460 -2.41 -2.38
#10 -0.0627 1.32 -0.640 0.0361 0.654
请注意,reduce
曾与tidyverse
更加一致,但OP的功能也可以引用并获得相同的结果
myfun2 <- function() {
quote(apply(., 1, sum ))
}
r2 <- Df %>%
mutate(total = !! myfun2())
all.equal(r2$total, r1$total)
#[1] TRUE