统计分析:使用 R/R/R 基础知识的入门
此页面或部分是一个未开发的草稿或大纲。 您可以帮助完善作品,也可以在项目室寻求帮助。 |
如果您完成所有这些主题中的练习,您应该能够相对熟练地使用 R(另请参见编程)。
100+2/3
[1] 100.6667
#this is a comment: R will ignore it
(100+2)/3 #You can use round brackets to group operations so that they are carried out first
5*10^2 #The symbol * means multiply, and ^ means "to the power", so this gives 5 times (10 squared), i.e. 500
1/0 #R knows about infinity (and minus infinity)
0/0 #undefined results take the value NaN ("not a number")
(0i-9)^(1/2) #for the mathematically inclined, you can force R to use complex numbers
> (100+2)/3 # 您可以使用圆括号对操作进行分组,以便它们首先执行 [1] 34 > 5*10^2 # 符号 * 表示乘法,^ 表示“乘方”,因此这是 5 乘以(10 的平方) [1] 500 > 1/0 # R 知道无穷大(和负无穷大) [1] Inf > 0/0 # 未定义的结果采用 NaN 值(“非数字”) [1] NaN > (0i-9)^(1/2) # 对于数学爱好者,您可以强制 R 使用复数 [1] 0+3i
- 如果您对复数一无所知,不用担心:它们在这里并不重要。
- 请注意,您不能使用大括号 {} 或方括号 [] 对操作进行分组。
<-
和 ->
来分配名称,如下面的练习中所示。您使用哪个符号取决于您是否更喜欢将名称放在前面或后面(将 ->
视为“放入”和 <-
视为“设置为”可能会有所帮助)。与许多统计软件包不同,R 通常不会显示您执行的分析的结果。相反,分析通常以产生一个可以存储的对象而告终。然后可以随时从对象中获取结果。因此,在 R 中进行统计分析时,您经常会发现自己命名和存储对象。您选择的名称应包含字母、数字和“.” 字符[2],并且不能以数字开头。0.001 -> small.num #Store the number 0.0001 under the name "small.num" (i.e. put 0.0001 into small.num)
big.num <- 10 * 100 #You can put the name first if you reverse the arrow (set big.num to 10000).
big.num+small.num+1 #Now you can treat big.num and small.num as numbers, and use them in calculations
my.result <- big.num+small.num+2 #And you can store the result of any calculation
my.result #To look at the stored object, just type its name
pi #There are some named objects that R provides for you
> big.num <- 10 * 100 # 您可以将名称放在前面,如果您反转箭头(将 big.num 设置为 10000)。 > big.num+small.num+1 # 现在您可以将 big.num 和 small.num 视为数字,并在计算中使用它们 [1] 1001.001 > my.result <- big.num+small.num+2 # 您可以存储任何计算的结果 > my.result # 要查看存储的对象,只需键入其名称 [1] 1002.001 > pi # 有一些 R 为您提供的命名对象 [1] 3.141593
citation()
citation()
函数就是一个例子。它可以接受一个可选参数,用于提供 R 附加包 的名称。如果您没有提供可选参数,通常会假设一个默认值(在 citation()
的情况下,此默认值为 "base"
,即提供基本包的引用:提供 R 语言大部分基础的包)。函数的大多数参数都是命名的。例如,citation 函数的第一个参数名为 package。为了提供额外的清晰度,在使用函数时,您可以使用较长的形式 name=value 提供参数。因此
citation("base")
与
citation(package="base")的作用相同。如果一个函数可以接受多个参数,使用长形式还可以更改参数的顺序,如以下示例代码所示。
citation("base") #Does the same as citation(), because the default for the first argument is "base"
#Note: quotation marks are needed in this particular case (see discussion below)
citation("datasets") #Find the citation for another package (in this case, the result is very similar)
sqrt(25) #A different function: "sqrt" takes a single argument, returning its square root.
sqrt(25-9) #An argument can contain arithmetic and so forth
sqrt(25-9)+100 #The result of a function can be used as part of a further analysis
max(-10, 0.2, 4.5) #This function returns the maximum value of all its arguments
sqrt(2 * max(-10, 0.2, 4.5)) #You can use results of functions as arguments to other functions
x <- sqrt(2 * max(-10, 0.2, 4.5)) + 100 #... and you can store the results of any of these calculations
x
log(100) #This function returns the logarithm of its first argument
log(2.718282) #By default this is the natural logarithm (base "e")
log(100, base=10) #But you can change the base of the logarithm using the "base" argument
log(100, 10) #This does the same, because "base" is the second argument of the log function
log(base=10, 100) #To have the base as the first argument, you have to use the form name=value
citation
指的是一个函数,而
"citation"
是一个文本 "字符串"。这在提供绘图标题等情况下很有用。
您可能会发现,了解 R 最棘手的一方面是了解在特定情况下使用哪个函数。幸运的是,R 不仅为其所有函数提供文档,还提供搜索文档的方法,以及其他获得帮助的方法。help.start() #A web-based set of help pages (try the link to "An Introduction to R")
help(sqrt) #Show details of the "sqrt" and similar functions
?sqrt #A shortcut to do the same thing
example(sqrt) #run the examples on the bottom of the help page for "sqrt"
help.search("maximum") #gives a list of functions involving the word "maximum", but oddly, "max" is not in there!
### The next line is commented out to reduce internet load. To try it, remove the first # sign.
#RSiteSearch("maximum") #search the R web site for anything to do with "maximum". Probably overkill here!
which.max()
帮助文件的 "另请参阅" 部分找到 max()
函数。不太理想!。TRUE
或 FALSE
[4])。在本主题中,我们将使用 "datasets" 包提供的一些示例向量,其中包含美国州的数据(参见 ?state
)。R 本身就是一个基于向量的程序;事实上,我们之前计算中使用的数字只是被视为具有单个元素的向量。这意味着 R 中的大多数基本函数在作为参数给出向量时将按预期工作,如下所示。state.area #a NUMERIC vector giving the area of US states, in square miles
state.name #a CHARACTER vector (note the quote marks) of state names
sq.km <- state.area*2.59 #Arithmetic works on numeric vectors, e.g. convert sq miles to sq km
sq.km #... the new vector has the calculation applied to each element in turn
sqrt(sq.km) #Many mathematical functions also apply to each element in turn
range(state.area) #But some functions return different length vectors (here, just the max & min).
length(state.area) #and some, like this useful one, just return a single value.
[1] 51609 589757 113909 53104 158693 104247 5009 2057 58560 58876 6450 83557 56400
[14] 36291 56290 82264 40395 48523 33215 10577 8257 58216 84068 47716 69686 147138 [27] 77227 110540 9304 7836 121666 49576 52586 70665 41222 69919 96981 45333 1214 [40] 31055 77047 42244 267339 84916 9609 40815 68192 24181 56154 97914 > state.name #一个 CHARACTER 向量(注意引号),包含州名
[1] "Alabama" "Alaska" "Arizona" "Arkansas" [5] "California" "Colorado" "Connecticut" "Delaware" [9] "Florida" "Georgia" "Hawaii" "Idaho"
[13] "Illinois" "Indiana" "Iowa" "Kansas" [17] "Kentucky" "Louisiana" "Maine" "Maryland" [21] "Massachusetts" "Michigan" "Minnesota" "Mississippi" [25] "Missouri" "Montana" "Nebraska" "Nevada" [29] "New Hampshire" "New Jersey" "New Mexico" "New York" [33] "North Carolina" "North Dakota" "Ohio" "Oklahoma" [37] "Oregon" "Pennsylvania" "The smallest state" "South Carolina" [41] "South Dakota" "Tennessee" "Texas" "Utah" [45] "Vermont" "Virginia" "Washington" "West Virginia" [49] "Wisconsin" "Wyoming" > sq.km <- state.area*2.59 #标准算术适用于数值向量,例如将平方英里转换为平方公里 > sq.km #... 给出另一个向量,其中对每个元素依次执行计算
[1] 133667.31 1527470.63 295024.31 137539.36 411014.87 269999.73 12973.31 5327.63 [9] 151670.40 152488.84 16705.50 216412.63 146076.00 93993.69 145791.10 213063.76
[17] 104623.05 125674.57 86026.85 27394.43 21385.63 150779.44 217736.12 123584.44 [25] 180486.74 381087.42 200017.93 286298.60 24097.36 20295.24 315114.94 128401.84 [33] 136197.74 183022.35 106764.98 181090.21 251180.79 117412.47 3144.26 80432.45 [41] 199551.73 109411.96 692408.01 219932.44 24887.31 105710.85 176617.28 62628.79 [49] 145438.86 253597.26 > sqrt(sq.km) #许多数学函数也依次应用于每个元素
[1] 365.60540 1235.90883 543.16140 370.86299 641.10441 519.61498 113.90044 72.99062 [9] 389.44884 390.49819 129.24976 465.20171 382.19890 306.58390 381.82601 461.58830
[17] 323.45487 354.50609 293.30334 165.51263 146.23826 388.30328 466.62203 351.54579 [25] 424.83731 617.32278 447.23364 535.06878 155.23324 142.46136 561.35100 358.33202 [33] 369.04978 427.81111 326.74911 425.54695 501.17940 342.65503 56.07370 283.60615 [41] 446.71213 330.77479 832.11058 468.96955 157.75712 325.13205 420.25859 250.25745 [49] 381.36447 503.58441 > range(state.area) #但有些函数返回不同长度的向量(这里,只是最大值和最小值)。 [1] 1214 589757 > length(state.area) #有些函数(如这个有用的函数)只返回一个值。 [1] 50
c()
,之所以这样命名是因为它将concatenates对象连接在一起。但是,如果您想创建由数字的规律序列组成的向量(例如 2、4、6、8、10、12 或 1、1、2、2、1、1、2、2),可以使用几个替代函数,包括 seq()
、rep()
和 :
运算符。c("one", "two", "three", "pi") #Make a character vector
c(1,2,3,pi) #Make a numeric vector
seq(1,3) #Create a sequence of numbers
1:3 #A shortcut for the same thing (but less flexible)
i <- 1:3 #You can store a vector
i
i <- c(i,pi) #To add more elements, you must assign again, e.g. using c()
i
i <- c(i, "text") #A vector cannot contain different data types, so ...
i #... R converts all elements to the same type
i+1 #The numbers are now strings of text: arithmetic is impossible
rep(1, 10) #The "rep" function repeats its first argument
rep(3:1,10) #The first argument can also be a vector
huge.vector <- 0:(10^7) #R can easily cope with very big vectors
#huge.vector #VERY BAD IDEA TO UNCOMMENT THIS, unless you want to print out 10 million numbers
rm(huge.vector) #"rm" removes objects. Deleting huge unused objects is sensible
[1] "one" "two" "three" "pi" > c(1,2,3,pi) #创建一个数值向量 [1] 1.000000 2.000000 3.000000 3.141593 > seq(1,3) #创建一个数字序列 [1] 1 2 3 > 1:3 #相同的快捷方式(但灵活性较差) [1] 1 2 3 > i <- 1:3 #您可以存储一个向量 > i [1] 1 2 3 > i <- c(i,pi) #要添加更多元素,您必须再次赋值,例如使用 c() > i [1] 1.000000 2.000000 3.000000 3.141593 > i <- c(i, "text") #向量不能包含不同类型的数据,因此 ... > i #... R 将所有元素转换为相同类型 [1] "1" "2" "3" "3.14159265358979" "text" > i+1 #数字现在是文本字符串:算术运算不可能 Error in i + 1 : non-numeric argument to binary operator > rep(1, 10) # "rep" 函数重复其第一个参数
[1] 1 1 1 1 1 1 1 1 1 1
> rep(3:1,10) #第一个参数也可以是一个向量
[1] 3 2 1 3 2 1 3 2 1 3 2 1 3 2 1 3 2 1 3 2 1 3 2 1 3 2 1 3 2 1
> huge.vector <- 0:(10^7) #R 可以轻松处理非常大的向量 > #huge.vector # 除非您想打印出 1000 万个数字,否则不要取消此注释 > rm(huge.vector) #"rm" 删除对象。删除未使用的巨大对象是明智之举
factor()
函数用于创建因子并定义可用水平。默认情况下,水平将从向量中的水平获取***。实际上,您通常不需要使用 factor()
,因为在从文件读取数据时,R 默认情况下会将文本转换为因子(参见 统计分析:使用 R 入门 / R / R / 数据框)。您可能需要使用 as.factor()
。在内部,R 将水平存储为从 1 开始的数字,但并非总是很明显哪个数字对应哪个水平,通常不需要知道。
ordered=TRUE
。state.name # 这 *不是* 一个因子 state.name[1] <- "Any text" # 可以在字符向量中替换文本 state.region[1] <- "Any text" # 但不能在因子中替换文本 state.region[1] <- "South" # 这可以 state.abb # 这不是一个因子,只是一个字符向量
character.vector <- c("Female", "Female", "Male", "Male", "Male", "Female", "Female", "Male", "Male", "Male", "Male", "Male", "Female", "Female" , "Male", "Female", "Female", "Male", "Male", "Male", "Male", "Female", "Female", "Female", "Female", "Male", "Male", "Male", "Female" , "Male", "Female", "Male", "Male", "Male", "Male", "Male", "Female", "Male", "Male", "Male", "Male", "Female", "Female", "Female") #a bit tedious to do all that typing
- 使用代码可能更容易,例如,女性为 1,男性为 2
Coded <- factor(c(1, 1, 2, 2, 2, 1, 1, 2, 2, 2, 2, 2, 1, 1, 2, 1, 1, 2, 2, 2, 2, 1, 1, 1, 1, 2, 2, 2, 1, 2, 1, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 1, 1, 1)) Gender <- factor(Coded, labels=c("Female", "Male")) # 然后可以将它转换为命名水平
some.missing <- c(1,NA)
is.na(some.missing)
is.na(some.missing) [1] FALSE TRUE
stripchart(state.areas, xlab="Area (sq. miles)") #see method="stack" & method="jitter" for others
boxplot(sqrt(state.area))
hist(sqrt(state.area))
hist(sqrt(state.area), 25)
plot(density(sqrt(state.area))
plot(UKDriverDeaths)
qqnorm()
ecdf(
统计分析:使用 R 入门 / R / 数据框 统计分析:使用 R 入门 / R / 获取数据到 R 统计分析:使用 R 入门 / R / 双变量图
- ↑ 根据您查看本书的方式,您可能在每个命令前面看到一个“>”字符。这不是要输入的命令的一部分:它是 R 本身产生的,用于提示您输入内容。如果您从本书的在线版本中复制和粘贴,此字符应该自动被省略,但如果您阅读的是纸质或 pdf 版本,则在键入 R 时,您应该省略“>”提示。
- ↑ 如果您熟悉计算机编程语言,您可能习惯在名称中使用下划线(“_”)字符。在 R 中,通常使用“.”来代替。
- ↑ 您可以使用单引号(')或双引号(")来分隔文本字符串,只要开始和结束引号匹配即可
- ↑ 这些是 R 中的特殊单词,不能用作对象的名称。对象
T
和F
是TRUE
和FALSE
的临时快捷方式,但如果您使用它们,请注意:由于 T 和 F 只是普通的对象名称,您可以通过覆盖它们来更改它们的含义。 - ↑ 实际上有 3 种允许的数字类型:“普通”数字、复数和简单整数。本书几乎完全处理其中的第一种类型。
- ↑ 这并不完全正确,但除非您是计算机专家,否则您不太可能使用最终类型:存储“原始”计算机位的元素向量,参见
?raw