假设一名高中生要求我们帮助解决形式为x 2 + b x + c = 0的几个二次方程。二次公式为我们提供了解决方案:
- b - √ b 2 - 4 一个Ç 2 一 和 - b + √ b 2 - 4 一个Ç 2 一这当然会根据a的值而改变,b和c。编程语言的一个优点是我们可以使用这些变量定义变量和编写表达式,类似于我们在数学中的方式,但获得数值解。我们将在下面写出二次方程的通用代码,但是如果要求我们求解x 2 + x - 1 = 0,然后我们定义:
它存储值供以后使用。我们用来<-
为变量赋值。
我们也可以使用=,
而不是分配值<-
,但我们建议不要使用=
以避免混淆。
将上面的代码复制并粘贴到控制台中以定义三个变量。请注意,当我们进行此分配时,R不会打印任何内容。这意味着对象已成功定义。如果你犯了一个错误,你会收到一条错误信息。
要查看存储在变量中的值,我们只需要求R进行求值a
并显示存储的值:
a#> [1] 1
要求R向我们展示存储的值的更明确的方法a
是使用print
如下:
我们使用术语对象来描述存储在R中的东西。变量是示例,但是对象也可以是更复杂的实体,例如函数,稍后将对其进行描述。
当我们在控制台中定义对象时,我们实际上正在更改工作区。您可以通过键入以下内容来查看工作区中保存的所有变量:
ls()#> [1] 'a' 'b' 'c' 'img_path' 'murders'
在RStudio中,Environment选项卡显示值:
我们应该看到a
,b
和c
。如果您尝试恢复不在工作区中的变量的值,则会收到错误。例如,如果您键入,x
您将收到以下消息:
Error: object 'x' not found
。
现在,由于这些值保存在变量中,为了获得方程的解,我们使用二次公式:
定义变量后,数据分析过程通常可以描述为应用于数据的一系列函数。R包括几个预定义的函数,我们构建的大多数分析管道都广泛使用这些函数。
我们已经使用的install.packages
,library
和ls
功能。我们还使用该函数sqrt
来求解上面的二次方程。还有更多预建功能,甚至可以通过包添加更多功能。这些功能不会出现在工作区中,因为您没有定义它们,但可以立即使用它们。
通常,我们需要使用括号来评估函数。如果键入ls
,则不评估函数,而是R显示定义函数的代码。如果键入ls()
,则评估函数,如上所示,我们在工作区中看到对象。
与此不同ls
,大多数函数需要一个或多个参数。下面是我们如何将对象分配给函数的参数的示例log
。请记住,我们之前定义a
为1:
log(8)#> [1] 2.08log(a) #> [1] 0
通过查看R中包含的非常有用的手册,您可以找到函数期望的内容及其功能。您可以通过使用以下help
函数获得帮助:
对于大多数功能,我们也可以使用这个简写:
?log
帮助页面将显示函数所期望的参数。例如,log
需要x
和base
运行。但是,有些参数是必需的,其他参数是可选的。您可以通过在帮助文档中注明分配了默认值来确定哪些参数是可选的=
。定义这些是可选的。例如,函数的基数log
默认为默认情况下base = exp(1)
创建log
自然日志。
如果您想在不打开帮助系统的情况下快速查看参数,可以键入:
您只需指定另一个对象即可更改默认值:
log(8, base = 2)#> [1] 3
请注意,我们没有x
像这样指定参数:
上面的代码有效,但我们可以节省一些输入:如果没有使用参数名称,R假定您按照帮助文件中显示的顺序输入参数或者输入args
。因此,通过不使用名称,它假定参数x
后跟base
:
log(8,2)#> [1] 3
如果使用参数的名称,那么我们可以按照我们想要的顺序包含它们:
要指定参数,我们必须使用=
,而不能使用<-
。
规则有一些例外,即函数需要对括号进行求值。其中,最常用的是算术运算符和关系运算符。例如:
2 ^ 3#> [1] 8
您可以键入以下内容来查看算术运算符:
要么
?'+'
键入以下关系运算符:
要么
?'>'
有几个数据集可供用户练习和测试功能。您可以通过键入以下内容查看所有可用数据集:
这将显示这些数据集的对象名称。这些数据集是只需键入名称即可使用的对象。例如,如果您键入:
co2
R将向您展示Mauna Loa大气CO2浓度数据。
其他预建对象是数学量,例如常数π和∞:
我们使用的字母a
,b
并c
作为变量名,但变量名可以是任何东西。R中的一些基本规则是变量名必须以字母开头,不能包含空格,不应该是在R中预定义的变量。例如,不要install.packages
通过键入类似的名称来命名其中一个变量install.packages <- 2
。
一个很好的约定是使用描述存储内容的有意义的单词,仅使用小写,并使用下划线代替空格。对于二次方程,我们可以使用这样的东西:
solution_1 <- (-b + sqrt(b^2 - 4*a*c)) / (2*a)solution_2 <- (-b - sqrt(b^2 - 4*a*c)) / (2*a)
如需更多建议,我们强烈建议您学习Hadley Wickham的风格指南。
值将保留在工作区中,直到您结束会话或使用该功能擦除它们rm
。但是工作空间也可以保存以供以后使用。实际上,当您退出R时,程序会询问您是否要保存工作区。如果您保存它,下次启动R时,程序将恢复工作区。
我们实际上建议不要以这种方式保存工作区,因为当您开始处理不同的项目时,跟踪保存的内容将变得更加困难。相反,我们建议您为工作区指定一个特定名称。您可以使用函数save
或执行此操作save.image
。要加载,请使用该功能load
。保存工作区时,我们建议使用后缀rda
或RData
。在RStudio中,您还可以通过导航到“ 会话”选项卡并选择“ 将工作区另存为”来执行此操作。您可以稍后使用同一选项卡中的“ 加载工作区”选项加载它。您可以阅读帮助页面save
,save.image
并load
了解更多信息。
解决另一个方程,如3 x 2 + 2 x - 1,我们可以复制并粘贴上面的代码,然后重新定义变量并重新计算解决方案:
通过使用上面的代码创建和保存脚本,我们不需要每次都重新键入所有内容,而只需更改变量名称。尝试将上面的脚本编写到编辑器中,并注意更改变量和接收答案是多么容易。
如果一行R代码以符号开头,#
则不对其进行评估。我们可以用它来写出我们为什么编写特定代码的提醒。例如,在上面的脚本中我们可以添加:
## Code to compute solution to quadratic equation of the form ax^2 + bx + c## define the variablesa <- 3 b <- 2c <- -1## now compute the solution(-b + sqrt(b^2 - 4*a*c)) / (2*a)(-b - sqrt(b^2 - 4*a*c)) / (2*a)
前100个正整数的总和是多少?整数之和的公式1通过n是n (n + 1 )/ 2。定义n = 100然后使用R计算1的和到100使用公式。总和是多少?
现在使用相同的公式计算1到1,000之间的整数之和。
查看在R中键入以下代码的结果:
根据结果,您认为功能seq
和sum
做什么?您可以使用该help
系统:
A. sum
创建一个数字列表seq
并将它们相加。
B. seq
创建一个数字列表sum
并将它们相加。
C. seq
计算两个参数之间的差异,并sum
计算1到1000的总和。
D. sum
总是返回相同的数字。
在数学和编程中,我们说我们在用给定数字替换参数时评估函数。因此,如果我们输入sqrt(4)
,我们会评估sqrt
函数。在R中,您可以评估另一个函数内的函数。评估从内到外发生。使用一行代码计算100的平方根的基数10。
以下哪项将始终返回存储的数值x
?如果需要,您可以尝试示例并使用帮助系统。
一个。 log(10^x)
B. log10(x^10)
C。 log(exp(x))
D. exp(log(x, base = 2))
R中的变量可以是不同类型的。例如,我们需要将数字与字符串和表格与简单的数字列表区分开来。该函数class
帮助我们确定我们拥有的对象类型:
a <- 2class(a)#> [1] 'numeric'
为了在R中高效工作,学习不同类型的变量以及我们可以用这些变量做什么是很重要的。
联系客服