R语言迭代按位置选取tibble列添加到data.frame的解决方法
你遇到的异常是tibble的默认下标行为和base R data.frame不一致导致的:base R中用[,i]取单列会默认丢弃维度返回向量,但tibble的[,i]默认保留维度,返回的是1列的tibble而非原子向量,将这类对象直接赋值给base data.frame的列会生成嵌套列表列,打印时就会出现带ANSI颜色控制符的异常内容和警告。
解决方法
共有三种常用实现方式,均支持按位置提取tibble的单列返回向量:
- 加
drop = TRUE参数,强制tibble取下标时丢弃维度:
df$output = df_tibble[, i, drop = TRUE]
- 用dplyr的
pull()函数,专门用于提取单列返回向量:
df$output = pull(df_tibble, i)
- 用双中括号下标取列,和base R取列表元素的逻辑一致,直接返回向量:
df$output = df_tibble[[i]]
修正后完整循环示例
# 先获取tibble的总列数 n <- ncol(df_tibble) for (i in 1:n) { # 任选上述三种写法之一即可,这里以双中括号为例 df$output = df_tibble[[i]] print(df) # 其他下游处理逻辑 }
运行上述代码即可得到预期输出,且不会破坏base data.frame的行名格式,满足下游依赖包的要求。
内容的提问来源于stack exchange,提问作者John Hadish
相关产品推荐
相关产品推荐

