gpt4 book ai didi

r - 在R中,出现以下错误: "attempt to replicate an object of type ' closure'"

转载 作者:行者123 更新时间:2023-12-01 22:50:11 26 4
gpt4 key购买 nike

我正在尝试编写一个 R 函数,该函数接受一个数据集并输出plot() 函数以及在其环境中读取的数据集。这意味着您不必再使用 Attach(),这是一个很好的做法。这是我的例子:

mydata <- data.frame(a = rnorm(100), b = rnorm(100,0,.2))
plot(mydata$a, mydata$b) # works just fine

scatter_plot <- function(ds) { # function I'm trying to create
ifelse(exists(deparse(quote(ds))),
function(x,y) plot(ds$x, ds$y),
sprintf("The dataset %s does not exist.", ds))
}

scatter_plot(mydata)(a, b) # not working

这是我收到的错误:

Error in rep(yes, length.out = length(ans)) :attempt to replicate an object of type 'closure'

我尝试了其他几个版本,但它们都给了我同样的错误。我做错了什么?

编辑:我意识到代码不太实用。我的目标是更好地理解函数式编程。我在 SAS 中编写了一个类似的宏,我只是想在 R 中编写它的对应宏,但我失败了。我只是选择这个作为例子。我认为这是一个非常简单的示例,但它不起作用。

最佳答案

有一些小问题。 ifelse是一个向量化函数,但你只需要一个简单的if 。事实上,您并不真正需要 else -- 如果数据集不存在,您可以立即抛出错误。请注意,您的错误消息未使用对象的名称,因此它将创建自己的错误。

您正在通过ab而不是"a""b" 。而不是ds$x语法,您应该使用 ds[[x]]编程时的语法( fortunes::fortune(312) )。如果这就是您想要调用该函数的方式,那么您还必须解析这些参数。最后,我想你想要 deparse(substitute())而不是deparse(quote())

scatter_plot <- function(ds) {
ds.name <- deparse(substitute(ds))
if (!exists(ds.name))
stop(sprintf("The dataset %s does not exist.", ds.name))
function(x, y) {
x <- deparse(substitute(x))
y <- deparse(substitute(y))
plot(ds[[x]], ds[[y]])
}
}
scatter_plot(mydata)(a, b)

关于r - 在R中,出现以下错误: "attempt to replicate an object of type ' closure'",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17685502/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com