我是初学者,最近开始使用R代替Stata,因为它具有开源性质。
我对“+”继续符号有点困惑。
以下是我的数据:
head(mtcars)
mpg cyl disp hp drat wt qsec vs am gear carb
Mazda RX4 21.0 6 160 110 3.90 2.620 16.46 0 1 4 4
Mazda RX4 Wag 21.0 6 160 110 3.90 2.875 17.02 0 1 4 4
Datsun 710 22.8 4 108 93 3.85 2.320 18.61 1 1 4 1
Hornet 4 Drive 21.4 6 258 110 3.08 3.215 19.44 1 0 3 1
Hornet Sportabout 18.7 8 360 175 3.15 3.440 17.02 0 0 3 2
Valiant 18.1 6 225 105 2.76 3.460 20.22 1 0 3 1
让我们考虑四种情况:
场景1: 我注意到如果我编写以下块代码,RStudio会自动附加“+”:
attach(mtcars)
cyl.f <- factor(cyl, levels= c(4,6,8),
labels = c("4 cylinder", "6 cylinder",
"8 cylinder"))
变为:
cyl.f <- factor(cyl, levels= c(4,6,8),
+ labels = c("4 cylinder", "6 cylinder",
+ "8 cylinder"))
如上所示,RStudio会自动附加“+”
场景2: 如果我在代码的末尾添加“+”,那么由于一些奇怪的原因它不起作用:
cyl.f <- factor(cyl, levels= c(4,6,8), +
labels = c("4 cylinder", "6 cylinder", +
"8 cylinder"))
这会引发错误。
场景3: 如果我在代码的开头添加“+”,则由于一些奇怪的原因它不起作用:
cyl.f <- factor(cyl, levels= c(4,6,8),
+ labels = c("4 cylinder", "6 cylinder",
+ "8 cylinder"))
这会引发错误。这是可以理解的,因为RStudio会自动添加另一个“+”继续运算符。
情景4:
windows()
ggplot(data=mtcars, aes(x=wt, y=mpg)) +
geom_point() +
labs(title="Automobile Data", x="Weight", y="Miles Per Gallon")
如果我不添加“+”,则不起作用。显然,似乎“+”是上面的“管道”操作员。
现在,挑战在于我无法谷歌搜索或搜索SO,因为搜索引擎都认为“+”是一个OR运算符。
有人可以解释,当“+”是“继续”的操作员时,以及当它是“管道”的操作员时。
我很感激任何想法和详细解释。这对我来说非常困惑。
答案 0 :(得分:7)
您将代码与R控制台显示的提示混淆。换行符后控制台中自动出现的+
是一个控制台提示符,表示需要进一步输入。它不是代码的一部分。
为了说明这一点,我检查了继续提示的选项并更改了一个例子:
options("continue")
options(continue = "% ")
data.frame(a = 1,
b = 2)
这在控制台中显示如下:
> options("continue")
$continue
[1] "+ "
> options(continue = "% ")
> data.frame(a = 1,
% b = 2)
a b
1 1 2
如您所见,继续提示已从+
更改为%
。请注意,提示始终位于控制台中的相同位置。它们始终是任何输入行的第一个字符,默认情况下,它们后跟一个空格字符。
当部分代码+
运算符实际上是一个函数时,它通常会进行算术运算,但可以为不同的行为定义方法。这就是ggplot2的作用。
PS:如果您正在使用RStudio,我希望您创建了一个新文件并编写了一个脚本,您可以从中将代码发送到控制台(例如,按 Ctrl + 输入)。一些初学者不知道如何使用RStudio并只是在控制台中写。
答案 1 :(得分:1)
通常在R中,+仅表示添加。 Ggplot2是一个特殊情况,因为它覆盖了默认行为,因此+意味着您可以将对象添加到一起,以构建绘图的图层。在幕后,ggplot正在进行每个单独的函数调用,将它们放入一个列表中,然后一起执行它们。
http://docs.ggplot2.org/current/gg-add.html
所以,现在来解释你的代码问题。
+运算符通常表示加法,如1 + 1 = 2.其次,单个函数调用可以换行而不需要任何连续运算符。因此,考虑到这一点,在函数调用的中间添加一个加号毫无意义。
R将采用此代码:
cyl.f <- factor(cyl, levels= c(4,6,8), +
labels = c("4 cylinder", "6 cylinder", +
"8 cylinder"))
并将其转换为:
cyl.f <- factor(cyl, levels= c(4,6,8), + labels = c("4 cylinder", "6 cylinder", + "8 cylinder"))
其次,你对连续代码的猜测是不正确的。它更像是一个延续指标,只是R表示代码是同一个函数调用的一部分。