2016-09-26 71 views
0

範圍定義變量我有下面的代碼片段使用分配的功能

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

您對'%>%'的使用在這裏有點混亂。我不確定你是否在'dplyr'-sense('data.frame')或更直接的'magrittr'意義上使用它。無論如何,儘管這確實是一個簡單的例子,但它將有助於提供一些背景信息,例如,是否正在對/使用'x'(和/或其他要求)進行其他操作。否則,'{boo < - x;噓; }'符合你的嚴格需求(我推斷這不是你所需要的)。 – r2evans

+0

請發佈所有'library()'行。 – Parfait

+0

@ r2evans感謝您的反饋 – kevinykuo

回答

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無形返回(在上下文「.」)存儲的值,你應該能夠保持管道後移動。