我正在为自己创建一些函数,我不知道如何继续以便使用从一个函数返回到另一个函数的对象(例如值),而控制台仍在运行。举个例子:如何在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'的对象。 关于代码的任何建议或者这种编码可能产生的错误都是值得欢迎的。
在此再次寻找后,我可能已经错过了你所寻找的,如果是的话让我知道,我将删除或更新答案。 –
您引用的ggplot范例相当复杂;它实际上是使用它自己的特殊函数来添加'ggplot2 ::: add_ggplot'。 – joran
ggplot2包重载'+'操作符,复制该过程的方向涉及创建一个将被分派到正确代码的新类。你应该搜索泛型函数。我认为这个要求太宽泛了。如果你决定走这条路线,你应该阅读维纳布尔斯和里普利的“S编程”或哈德利的“高级R” –