2

我不知道发生了什么,但我似乎无法向向量添加常数。例如,在控制台中键入 c(1,2,3,4)+5 返回 15 而不是 (6,7,8,9)。我究竟做错了什么?感谢您的帮助。

4

1 回答 1

14

有人……可能你……重新定义了“+”函数。这很容易做到:

> `+` <- function(x,y) sum(x,y)
> c(1,2,3,4)+5
[1] 15

这很容易修复,只需使用rm()

> rm(`+`)
> c(1,2,3,4)+5
[1] 6 7 8 9

编辑:评论(提出了c被重新定义为的替代可能性sum)提示我添加有关如何检查和从替代可能性中恢复的信息。您可以使用两种方法来确定表达式中的两个函数中的哪一个c(1,2,3,4) + 5是罪魁祸首。可以输入他们的名字(用反引号括起来+),并注意你是否得到了正确的定义:

> `+`
function (e1, e2)  .Primitive("+")
> c
function (..., recursive = FALSE)  .Primitive("c")

使用rm罪魁祸首(上面不匹配的那个)仍然是最快的解决方案。使用全局 rm 是会话中的大脑擦除:

rm(list=ls())  
# all user defined objects, including user-defined functions will be removed

退出和重新启动的建议在某些情况下不起作用。如果您退出并保存,则将保留当前函数定义。如果您之前从发生重新定义的会话中退出并保存,那么不在此会话中保存也不会解决问题。先前会话的结果保存在名为“.Rdata”的文件中,该文件对 Mac 和 Windows 用户均不可见,因为 OS 文件查看器(Mac 的 Finder.app 或 MS 的 Windows 资源管理器)不会显示以“开头的文件名”点”。我怀疑 Linux 用户默认情况下会看到它们,因为使用ls在终端会话中将显示它们。(很容易找到在 Mac 中更改该行为的方法,这就是我运行设备的方式。)删除 .Rdata 文件在这种情况下以及在 R 会话在启动时崩溃的情况下很有帮助。

于 2012-08-18T15:13:01.830 回答