←
PDF 149 / 520 Interacting with Older Code
→
English · PDF 149
Original PDF page 149
中文 · PDF 149

df <- tibble( x = runif(5), y = rnorm(5) ) # 按名称提取 df$x #> [1] 0.434 0.395 0.548 0.762 0.254 df[["x"]] #> [1] 0.434 0.395 0.548 0.762 0.254 # 按位置提取 df[[1]] #> [1] 0.434 0.395 0.548 0.762 0.254

要在管道中使用这些方法,你需要使用特殊的占位符 .:

df %>% .$x #> [1] 0.434 0.395 0.548 0.762 0.254 df %>% .[["x"]] #> [1] 0.434 0.395 0.548 0.762 0.254

与 data.frame 相比,tibble 更加严格:它们从不进行部分匹配,并且当你要访问的列不存在时会生成一条警告。

与旧代码交互

一些较旧的函数无法与 tibble 一起使用。如果你遇到这类函数,可以使用 as.data.frame() 将 tibble 转回 data.frame:

class(as.data.frame(tb)) #> [1] "data.frame"

一些较旧的函数无法与 tibble 一起使用的主要原因是 [ 函数。在本书中我们不常使用 [,因为 dplyr::filter() 和 dplyr::select() 允许你用更清晰的代码解决同样的问题(但你将在第 300 页的“子集选取”中学到一点相关知识)。对于基础 R 的数据框,[ 有时返回一个数据框,有时返回一个向量。而对于 tibble,[ 总是返回另一个 tibble。

练习

    1. 你如何判断一个对象是否是 tibble?(提示:尝试打印 mtcars,它是一个常规数据框。)