R 管道链的就地改造
我试图在R 管道链的就地改造,r,magrittr,R,Magrittr,我试图在magrittr中动态修改管道链中的某些对象。第一次尝试: 1:3 %>% (function(x) {x[1] <- 42; x}) #[1] 42 2 3 我想知道在不需要定义任何lambda的情况下是否可以实现同样的功能。最短的方法是什么?我可以使用赋值运算符%{.[1]这些管道的主要思想是使内容可读,而将函数定义内联会在一定程度上撤销这一点。我宁愿在管道之外定义一个函数并使用它: > fidge=function(x,n,v){x[n]=v;x} &g
magrittr
中动态修改管道链中的某些对象。第一次尝试:
1:3 %>% (function(x) {x[1] <- 42; x})
#[1] 42 2 3
我想知道在不需要定义任何lambda的情况下是否可以实现同样的功能。最短的方法是什么?我可以使用赋值运算符
%{.[1]这些管道的主要思想是使内容可读,而将函数定义内联会在一定程度上撤销这一点。我宁愿在管道之外定义一个函数并使用它:
> fidge=function(x,n,v){x[n]=v;x}
> 1:3 %>% fidge(1,42)
[1] 42 2 3
特别是如果你计划在多个地方做这件事
如果你真的想在这里打代码高尔夫,这个怎么样:
> 1:3 %>% "[<-"(1,42)
[1] 42 2 3
>1:3%>%“[尝试以下操作:
> 1:3 %>% replace(1, 42)
[1] 42 2 3
例如,data.frame
s中的功能可以用于:
iris %>%
within({
Sepal.Length <- 10
Width.Square <- Sepal.Width^2
})
@Spacedman:也许可以为[我喜欢打高尔夫球的方法,尽管这似乎有点过分。第一个选项似乎是合适的,谢谢。在这种情况下,使用替换,接受GG的答案!这是另一个黄金案例。”“规则”总是有一个基本函数;谢谢!
> 1:3 %>% replace(1, 42)
[1] 42 2 3
iris %>%
within({
Sepal.Length <- 10
Width.Square <- Sepal.Width^2
})
list(a = 1, b = 2) %>%
within({
a = 3
d = 4
})