2017-05-26 27 views
0

我正在为自己创建一些函数,我不知道如何继续以便使用从一个函数返回到另一个函数的对象(例如值),而控制台仍在运行。举个例子:如何在R中传递前一个函数的对象

first <- function(x){ 
return(x) 
} 

second <- function(y){ 
z <- x + y 
return(z) 
} 

所以,如果你调用这些函数用“+” ...

first(x = 5) + 
    second(y = 5) 

我希望值10在这种特殊情况下,显然第二个函数( )找不到对象x,因为后者是在第一个()环境中分配的。

这种编程方式类似于ggplot(),例如:

ggplot(aes(x = x, y = y), data = data) + 
    geom_point() 

我知道这类型的节目意味着使用环境,但我无法得到它的工作。有什么建议么?

谢谢!

编辑

展望github上我想通了,以ggplot包,我想:

hh_first <- function(data) { 

    h <- structure(list(data = data), class = c("hh")) 

    h 
} 

"+.hh" <- function(e1, e2) { 

    add_hh(e1, e2) 

} 

add_hh <- function(h, object) { 

    h$data <- paste(h$data, object, sep = "") 
    h$data 

} 

hh_second <- function(data) { 

    data 

} 

例如...

hh_first('Hi') + 
    hh_second(', how are you?') 

返回一个字符串,“嗨,你好吗?'。在这种情况下,加号运算符用于类'hh'的对象。 关于代码的任何建议或者这种编码可能产生的错误都是值得欢迎的。

+0

在此再次寻找后,我可能已经错过了你所寻找的,如果是的话让我知道,我将删除或更新答案。 –

+0

您引用的ggplot范例相当复杂;它实际上是使用它自己的特殊函数来添加'ggplot2 ::: add_ggplot'。 – joran

+1

ggplot2包重载'+'操作符,复制该过程的方向涉及创建一个将被分派到正确代码的新类。你应该搜索泛型函数。我认为这个要求太宽泛了。如果你决定走这条路线,你应该阅读维纳布尔斯和里普利的“S编程”或哈德利的“高级R” –

回答

1

尝试:

first <- function(x){ 
    return(x) 
} 

second <- function(x ,y){ 
    z <- x + y 
    return(z) 
} 

second(first(5), 5) 

OR

myX <- first(5) 

second(myX, 5) 

OR

library(magrittr) # Which uses pipes, %>%, to pass the results of a function to the first variable of the second function 
first(5) %>% second(5) 
+2

使用你的函数也可以这样写:'library(magrittr);第一(5)%>第二(5)% –

相关问题