使用assign来定义函数范围内的变量

时间:2016-09-26 17:14:59

标签: r

我有以下代码段

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

我的印象是,这将是一种“更清洁”的编码方式,但如果这不是一种好的做法,我很乐意学习。

1 个答案:

答案 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;在您的上下文中),您应该能够让管道继续移动。