【发布时间】:2012-08-14 17:15:46
【问题描述】:
我不知道发生了什么,但我似乎无法向向量添加常数。例如,在控制台中键入 c(1,2,3,4)+5 返回 15 而不是 (6,7,8,9)。我究竟做错了什么? 感谢您的帮助。
【问题讨论】:
-
开始一个干净的会话它应该可以工作。
我不知道发生了什么,但我似乎无法向向量添加常数。例如,在控制台中键入 c(1,2,3,4)+5 返回 15 而不是 (6,7,8,9)。我究竟做错了什么? 感谢您的帮助。
【问题讨论】:
某人....可能你...重新定义了“+”功能。很容易做到:
> `+` <- 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
编辑:cmets(提出了 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 会话在启动时崩溃的情况下很有帮助。
【讨论】:
+,你应该在他们的机器上重新定义T <- FALSE和F <- TRUE。
ls() 找到。删除它们,执行 save.image() ,您的 .Rdata 文件将不再重新获取违规项目。
conflicts函数来识别哪些函数被重新定义了。