我有以下代码段
library(magrittr)
test_fun <- function(x) {
foo <- x %>%
assign("boo", .)
boo
}
test_fun("hello") # I want this to return "hello"
# Error in test_fun("hello") : object 'boo' not found
我希望能够为函数范围内的名称赋值。有办法吗?
修改
管道背后的原因是,在我的实际用例中,我想保存一些可以在管道中稍后引用的中间结果。换句话说,而不是写例如。
foo1 <- data %>% ...
foo2 <- foo1 %>% ...
foo3 <- some manipulation with foo1 and foo2
我可以做类似
的事情foo <- data %>% ... %>% (assign to foo2) %>% ... %>% some manipulation with foo2
我的印象是,这将是一种“更清洁”的编码方式,但如果这不是一种好的做法,我很乐意学习。
答案 0 :(得分:0)
我不一定推荐这一点(不了解所有要求),但您遇到的问题是assign
在执行时看到的范围。无论它在哪里,重要的是它实际上是分配给名为boo
的变量,但不在test_fun
的范围内,也不在以后很容易检索的方式。
快速解决方案可能是:
test_fun <- function(x) {
myenv <- environment()
foo <- x %>%
assign("boo", ., envir = myenv)
# something else with 'foo'? side-effect? unknown ...
boo
}
test_fun("hello")
# [1] "hello"
由于assign
无形地返回存储的值(&#34; .
&#34;在您的上下文中),您应该能够让管道继续移动。