读取表并在R中的循环中分配给字符串

用户名

我敢肯定对此有一个简单的答案,但是我似乎找不到正确的代码。我有一个文件列表和一个字符串列表,我想将这些文件的内容分配为数据帧。然后,我想在同一循环内对数据帧执行其他操作。我还需要保留每个数据框用于下游工作。这是我的代码:

samples <- c('fc14','g14','fc18','g18','fc21','g21')
fc_samples <- grep("fc", samples, value=TRUE)
fc_files <- c('fc14_g14_full_annot_uniq.txt','fc18_g18_full_annot_uniq.txt','fc21_g21_full_annot_uniq.txt')


# make dataframes
for (file in fc_files)
{   fc_n <- 1
    g_n <- 1
    print(file);

    # THE BIT THAT DOESN'T WORK
    assign(paste("data", fc_samples[fc_n], sep='_'), read.table(file,sep = "\t", header=T));

    # HERE I EXPECT THE TOP OF MY DF TO BE PRINTED BUT IT ISN'T
    head(data_fc14);

    # I TRY THIS INSTEAD
    do.call("<-",list(paste("data", fc_samples[fc_n], sep='_'), read.table(file,sep = "\t", header=T)))

    # I TRY TO PRINT THE DF AGAIN BUT STILL NO LUCK
    head(paste("data", fc_samples[fc_n], sep='_'))

    # FIRST DOWNSTREAM THING I WOULD LIKE TO DO,
    # WON'T WORK UNTIL I SOLVE THE DF ASSIGNMENT ISSUE
    names(paste("data", fc_samples[fc_n], sep='_'))[names(paste("data", fc_samples[fc_n], sep='_'))==c('SAMPLE_fc','CHROM_fc','START_fc','REF_fc','ALT_fc','REGION_fc','DP_fc','FREQ_fc','GENE_fc','AFFECTS_fc','dbSNP_fc',
    #                           'NOVEL_fc')] <- c('SAMPLE','CHROM','START','REF','ALT','REGION','DP','FREQ','GENE','AFFECTS','dbSNP','NOVEL')

    # ITERATE TO THE NEXT FILE
    fc_n <- fc_n+1
}

我从这里这里尝试解决方案,但没有帮助。如果有人对此有一个优雅的解决方案,那就太好了!提前致谢!

奥雷尔

修改您的代码:

samples <- c('fc14','g14','fc18','g18','fc21','g21')
fc_samples <- grep("fc", samples, value=TRUE)

# Make dummy example files
fc_files <- file.path("example-data", c(
  'fc14_g14_full_annot_uniq.txt','fc18_g18_full_annot_uniq.txt',
  'fc21_g21_full_annot_uniq.txt'))
set.seed(123) ; dummy_df <- 
  setNames(
    as.data.frame(replicate(12, rnorm(7))),
    c('SAMPLE_fc','CHROM_fc','START_fc','REF_fc','ALT_fc','REGION_fc',
      'DP_fc','FREQ_fc','GENE_fc','AFFECTS_fc','dbSNP_fc','NOVEL_fc')
  )
if (!dir.exists("./example-data")) dir.create("example-data")
invisible({
  lapply(fc_files, write.table, x = dummy_df, sep = "\t")
})

# "fc_n <- 1" should be outside the loop:
fc_n <- 1
for (file in fc_files) {
  g_n <- 1
  assign(paste("data", fc_samples[fc_n], sep='_'), 
         read.table(file,sep = "\t", header=T))
  # Copy data to be able to change its names
  f <- get(paste("data", fc_samples[fc_n], sep='_'))
  names(f)[names(f) == c('SAMPLE_fc','CHROM_fc','START_fc',
                         'REF_fc','ALT_fc','REGION_fc',
                         'DP_fc','FREQ_fc','GENE_fc','AFFECTS_fc',
                         'dbSNP_fc','NOVEL_fc')] <- 
    c('SAMPLE','CHROM','START','REF','ALT','REGION','DP','FREQ',
      'GENE','AFFECTS','dbSNP','NOVEL')
  # Assign it back, now that names have been changed
  assign(paste("data", fc_samples[fc_n], sep='_'), f)
  fc_n <- fc_n+1
}

一种“更优雅”的方式:
assign()ing不被认为是最佳实践,而是使用列表。
尽管我偶尔会自己使用它,但有时还是有很好的理由。

# For the '%>%' pipe
library(magrittr)

data <-
  samples %>% 
  grep(pattern = "fc", value = TRUE) %>% 
  setNames(nm = .) %>% 
  lapply(grep, x = fc_files, value = TRUE) %>% 
  lapply(read.table, sep = "\t", header = TRUE) %>% 
  lapply(function(f) setNames(f, sub("_fc", "", names(f))))

identical(data_fc14, data$fc14)
# [1] TRUE
identical(data_fc18, data$fc18)
# [1] TRUE
identical(data_fc21, data$fc21)
# [1] TRUE

# Clean up
print(unlink("example-data", recursive = TRUE))

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

查找字符串的模式,并在r中分配给新变量

来自分类Dev

将字符串分配给R中的变量

来自分类Dev

将字符串分配给块并在smalltalk中执行

来自分类Dev

选择第i行和第n列并在while循环中分配给变量

来自分类Dev

选择第i行和第n列,并在while循环中分配给变量

来自分类Dev

将字符串分配给python中的变量

来自分类Dev

在.NET MVC中分配给输入文本值时字符串被截断

来自分类Dev

分配给字符串的内存

来自分类Dev

如何换行并在shell中将特定的字符串分配给变量

来自分类Dev

无法在 ngFor 循环中分配值:无法分配给对象的只读属性

来自分类Dev

R-将值分配给for循环中的列表

来自分类Dev

读取用户输入并将字符串匹配结果分配给参数

来自分类Dev

如何基于R中的一组关键字将数字代码分配给字符串

来自分类Dev

如何将字符串中的字符分配给对象中的值?

来自分类Dev

无法将数据表值分配给字符串

来自分类Dev

如果将字符放置在字符串(数组)中,则将字符串值分配给字符

来自分类Dev

如果将字符放置在字符串(数组)中,则将字符串值分配给字符

来自分类Dev

将整数分配给字符串中的多个字符

来自分类Dev

如何将在C中分配的字符串返回给Ada并在Ada中释放它?

来自分类Dev

从字符串中获取每个字符并将其分配给新字符串

来自分类Dev

将char数组中的指针分配给字符串C中的每个单词

来自分类Dev

如何将数组中的字符串分配给 C 中的变量(来自函数)?

来自分类Dev

分配给单个对象的字符串数组实例

来自分类Dev

分割字符串,并分配给字段

来自分类Dev

将字符串数组分配给char **

来自分类Dev

将字符串文字分配给char *

来自分类Dev

将字符串数组分配给char **

来自分类Dev

将字符串的长度分配给整数:C ++

来自分类Dev

将char *分配给字符串而不复制

Related 相关文章

  1. 1

    查找字符串的模式,并在r中分配给新变量

  2. 2

    将字符串分配给R中的变量

  3. 3

    将字符串分配给块并在smalltalk中执行

  4. 4

    选择第i行和第n列并在while循环中分配给变量

  5. 5

    选择第i行和第n列,并在while循环中分配给变量

  6. 6

    将字符串分配给python中的变量

  7. 7

    在.NET MVC中分配给输入文本值时字符串被截断

  8. 8

    分配给字符串的内存

  9. 9

    如何换行并在shell中将特定的字符串分配给变量

  10. 10

    无法在 ngFor 循环中分配值:无法分配给对象的只读属性

  11. 11

    R-将值分配给for循环中的列表

  12. 12

    读取用户输入并将字符串匹配结果分配给参数

  13. 13

    如何基于R中的一组关键字将数字代码分配给字符串

  14. 14

    如何将字符串中的字符分配给对象中的值?

  15. 15

    无法将数据表值分配给字符串

  16. 16

    如果将字符放置在字符串(数组)中,则将字符串值分配给字符

  17. 17

    如果将字符放置在字符串(数组)中,则将字符串值分配给字符

  18. 18

    将整数分配给字符串中的多个字符

  19. 19

    如何将在C中分配的字符串返回给Ada并在Ada中释放它?

  20. 20

    从字符串中获取每个字符并将其分配给新字符串

  21. 21

    将char数组中的指针分配给字符串C中的每个单词

  22. 22

    如何将数组中的字符串分配给 C 中的变量(来自函数)?

  23. 23

    分配给单个对象的字符串数组实例

  24. 24

    分割字符串,并分配给字段

  25. 25

    将字符串数组分配给char **

  26. 26

    将字符串文字分配给char *

  27. 27

    将字符串数组分配给char **

  28. 28

    将字符串的长度分配给整数:C ++

  29. 29

    将char *分配给字符串而不复制

热门标签

归档