【问题标题】:R RStudio Resetting debug / function environmentR RStudio 重置调试/功能环境
【发布时间】:2014-06-13 05:04:47
【问题描述】:

当我调用函数时,我试图阻止 R 显示函数代码和环境信息。此功能是讲师提供的 Coursera R 编程作业的一部分。这是行为:

R 脚本:

makeVector <- function(x = numeric()) {
        m <- NULL
        set <- function(y) {
                x <<- y
                m <<- NULL
        }
        get <- function() x
        setmean <- function(mean) m <<- mean
        getmean <- function() m
        list(set = set, get = get,
             setmean = setmean,
             getmean = getmean)
}

我在控制台中运行以下命令:

> x <- 1:10
> makeVector(x)

得到:

$set
function (y) 
{
    x <<- y
    m <<- NULL
}
<environment: 0x000000000967dd58>

$get
function () 
x
<environment: 0x000000000967dd58>

$setmean
function (mean) 
m <<- mean
<environment: 0x000000000967dd58>

$getmean
function () 
m
<environment: 0x000000000967dd58>

似乎 RStudio 正在返回函数代码和环境信息,而不是执行函数。以前我在测验中运行了 debug(ls) 和 undebug(ls) - 我的直觉是 debug() 命令与行为有关。

为了解决这个问题,我已经尝试过了:

  • 删除包含 RStudio 设置的 RStudio-Desktop 文件夹。 这将我的外观和全局选项恢复为默认值,但是 函数调用行为仍然发生。
  • 卸载并重新安装 R 和 RStudio。该行为仍然发生 以上。

有人知道为什么 RStudio 显示的是函数代码和环境而不是执行函数吗?

非常感谢您的帮助!谢谢!

【问题讨论】:

  • 如果你从不真正调用它们,为什么它会执行这些函数?
  • 澄清一下-您编写的函数创建了几个不同的函数,然后将它们以列表的形式返回给用户。他们从来没有被召唤,所以你为什么对他们从未被处决感到困惑?
  • 哇,感谢您对 Dason 的启发……我想我没有仔细观察它,看不到它通过列表返回函数。我也对 部分感到困惑,我期待它使用 x 并以某种方式将其作为输出返回。所以 Dason 你是说我得到的输出是你所期望的吗?再次感谢。
  • 是的,输出正是我所期望的。总的来说,作为一个好的经验法则......如果某些事情的行为不像您期望的那样,您可能想要考虑您没有像您想象的那样理解该语言,而不是跳到结论是安装失败并试图卸载所有内容。
  • 为什么第一个函数需要m

标签: r debugging rstudio


【解决方案1】:

首先,这与 Rstudio 无关:Rstudio 只是一个 IDE,如果它以某种方式设法弄乱了您的代码,那会很奇怪,不是吗?您看到的行为完全没有问题,并且完全按照应有的方式进行。如果您熟悉 OOP,您会得到一个具有多种方法的“对象”。这是一个显示预期用途的小演示:

x <- 1:10
xx <- makeVector(x)
xx$get()
# [1]  1  2  3  4  5  6  7  8  9 10
xx$getmean()
#NULL
xx$setmean(mean(x))
xx$getmean()
#[1] 5.5
xx$setmean("Hi, I am a mean")
xx$getmean()
#[1] "Hi, I am a mean"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-04-05
    • 2015-11-10
    • 1970-01-01
    • 2014-11-19
    • 1970-01-01
    • 2015-03-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多