你遇到的最大的R-gotcha是什么?[

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (55)

这是我的:在列表索引中,my.list[[1]]不是my.list[1]。在R的早期学习了这一点。

提问于
用户回答回答于

删除Dataaframe中的行将导致添加非唯一命名的行,然后出错:

> a<-data.frame(c(1,2,3,4),c(4,3,2,1))
> a<-a[-3,]
> a
  c.1..2..3..4. c.4..3..2..1.
1             1             4
2             2             3
4             4             1
> a[4,1]<-1
> a
Error in data.frame(c.1..2..3..4. = c("1", "2", "4", "1"), c.4..3..2..1. = c(" 4",  : 
  duplicate row.names: 4

所以这里发生的是:

  1. 创建一个四行数据.框架,因此行名为c(1,2,3,4)
  2. 删除第三行,因此行名为c(1,2,4)
  3. 添加第四行,R自动设置等于索引(即4)的行名,因此行名为c(1,2,4,4)。这是非法的,因为行名应该是唯一的。我不明白为什么R应该允许这种类型的行为。在我看来,R应该提供一个唯一的行名。
用户回答回答于

当使用序列作为迭代索引时,最好使用seq_along()1:length(x)

在这里,我创建一个向量,这两种方法都返回相同的内容:

> x <- 1:10
> 1:length(x)
 [1]  1  2  3  4  5  6  7  8  9 10
> seq_along(x)
 [1]  1  2  3  4  5  6  7  8  9 10

现在让向量NULL:

> x <- NULL
> seq_along(x) # returns an empty integer; good behavior
integer(0)
> 1:length(x) # wraps around and returns a sequence; this is bad
[1] 1 0

这可能会在循环中引起一些混乱:

> for(i in 1:length(x)) print(i)
[1] 1
[1] 0
> for(i in seq_along(x)) print(i)
>

所属标签

可能回答问题的人

  • 华讯云

    0 粉丝0 提问11 回答
  • EatRice

    16 粉丝0 提问6 回答
  • 卓脑域名

    0 粉丝0 提问6 回答
  • gulu丶咕噜

    0 粉丝1 提问6 回答

扫码关注云+社区

领取腾讯云代金券