1.无法导入网页数据
1 问题描述
Error in file(file, "rt") : 无法打开链结
2 原因分析
网址在国外,没法链接
且此外: Warning message: In file(file, "rt") : InternetOpenUrl失败:’无法与服务器建立连接
3 解决方法
看看国内的网址会不会同样报错
2.二进列运算符中有非数值参数
1 问题描述
> theme_set(theme_classic)
Error in default + theme : 二进列运算符中有非数值参数
2 原因分析
#Q
1.theme_set()函数()内的变量格式是怎么样的?
2.什么是二进列运算符?
3 解决方法
#正确代码
> theme_set(theme_classic())
3.数据框索引找不到对象
1 问题描述
Error in `[.data.frame`(mydf, h > 5, ) : 找不到对象'h'
代码如下(示例):
> mydf <- data.frame(h=1:10,j=rnorm(10),k=letters[1:10])
> mydf
h j k
1 1 -0.30684546 a
2 2 2.43639437 b
3 3 1.67289651 c
4 4 1.36737534 d
5 5 -0.02161347 e
6 6 -0.76405537 f
7 7 1.25204280 g
8 8 1.48487312 h
9 9 -0.60690977 i
10 10 -0.61753073 j
> mydf[mydf$h>5,]
h j k
6 6 -0.7640554 f
7 7 1.2520428 g
8 8 1.4848731 h
9 9 -0.6069098 i
10 10 -0.6175307 j
> mydf[h>5,]
Error in `[.data.frame`(mydf, h > 5, ) : 找不到对象'h'
2 原因分析
这里的错误是因为mydf数据框没有添加到R的搜索路径中,所以找不到mydf数据框中的列变量
3 解决方法
用attach()将数据框添加进R的搜索路径中
代码如下(示例):
> attach(mydf)
> mydf[h>5,]
h j k
6 6 -0.7640554 f
7 7 1.2520428 g
8 8 1.4848731 h
9 9 -0.6069098 i
10 10 -0.6175307 j
4.矩阵索引用了$,报错
1 问题描述
> b <- matrix(1:12,c(3,4),dimnames=list(c("a","b","c"),c("A","B","C","D")))
> b
A B C D
a 1 4 7 10
b 2 5 8 11
c 3 6 9 12
> mapply(sum,b[,1],b[,2],b[,4])
a b c
15 18 21
> mapply(sum,b$A,b$B,b$D)
Error in b$A : $ operator is invalid for atomic vectors
> mapply(sum,b$a,b$b,b$c)
Error in b$a : $ operator is invalid for atomic vectors
2 原因分析
我所索引的数据对象是一个用c(),vector()函数创建的一维数据(即atomic vectors),但 "$" 对2维及以上数据才能进行使用
#验证:
> is.atomic(b)
[1] TRUE
3 解决方法
使用"[,]"进行索引
reference: link
4.思考延伸
Q:
matrix是二维数据,为什么会被视为atomic vectors呢?
是因为matrix的本质还是一个向量吗?
A:
R中的vector分为两类,atomic和list,二者的区别在于,前者元素类型必须相同,后者可以不同。前者的代表是向量和矩阵,后者的代表是list和数据框。
summary:
关键在于元素类型是否相同,atomic元素类型必须相同,list元素类型可以不同。
- atomic和list
atomic- logical
- integer
> p <- c(T,F,1L,4L)
> p
[1] 1 0 1 4
> is.double(p)
[1] FALSE
> is.numeric(p)
[1] TRUE
#p是integer类型
- double
> q <- c(T,F,1L,4)
> q
[1] 1 0 1 4
> is.double(q)
[1] TRUE
> is.numeric(q)
[1] TRUE
#q是double类型
🧨p和q看起来返回值一样,但其实二者的数据类型并不一样
(numeric: integer,double)
- character
( 5. complex 6. raw)
元素优先级:
character>double>integer>logical
list
5.plot() 变量类型与图形绘制
- 问题描述
> mons <- c("March","April","January","November","January","March","April","August","July","June")
> mons1 <- factor(mons)
> class(mons)
[1] "character"
> class(mons1)
[1] "factor"
> table(mons)
mons
April August January July June March November
2 1 2 1 1 2 1
> table(mons1)
mons1
April August January July June March November
2 1 2 1 1 2 1
> mons1
[1] March April January November January March April August July June
Levels: April August January July June March November
> plot(mons)
Error in plot.window(...) : 'ylim'值不能是无限的
此外: Warning messages:
1: In xy.coords(x, y, xlabel, ylabel, log) : 强制改变过程中产生了NA
2: In min(x) : min里所有的参数都不存在; 回覆Inf
3: In max(x) : max里所有的参数都不存在;回覆-Inf
> plot(mons1)
mons 为字符型向量,mons1 为因子型变量
plot(mons) 返回错误,而plot(mons1)则返回条形图
2.原因分析
plot()是一个泛型函数,常规参数设置应该是 plot(x,y,…)
所以
1)plot(mons)自然无法返回图像,因为mons只是一个字符型向量,相当于x,但函数内缺少y参数,则无法返回正常的图形
2)plot(mons1) 中mons1是因子型变量,相当于其隐性含有两类参数,即characters+levels,则分别为plot的x,y,并且绘制出的是条形图
3.解决方案