在R中无法向向量添加常数。

3

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


1
开始一个干净的会话,它应该可以工作。 - Tyler Rinker
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(list=ls())  
# all user defined objects, including user-defined functions will be removed

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


9
如果你发现有人重新定义了你机器上的+,那么你应该在他们的机器上重新定义T <- FALSEF <- TRUE - Joshua Ulrich
1
@flodel,你的回答更有可能是一次意外,因为DWin的解释需要恶意意图。如果DWin的回复是正确的,我会选择Joshua的建议。 - Tyler Rinker
谢谢,问题解决了!即使重新安装了R,这个问题还是没有消失。有没有办法清除之前执行的所有重新定义? - wizplum
@user1608941: "redefines" 只是当前加载的项目,您可以通过 ls() 找到它们。删除它们,执行 save.image(),您的 .Rdata 文件将不再重新加载有问题的项目。 - Carl Witthoft
1
你还可以使用“conflicts”函数来识别哪些函数被重新定义了。 - Greg Snow
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接