R error记录

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元素类型可以不同。

  1. atomic和list
    atomic
    1. logical
    2. 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类型
  1. 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)
  1. character
    ( 5. complex 6. raw)
    元素优先级:
    character>double>integer>logical

list

5.plot() 变量类型与图形绘制

  1. 问题描述
> 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)

plot1

   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.解决方案

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值