我在对象my.ID中有一个样本列表:
head(my.ID)
返回:
[1] PATL1 PATL2 PATL9 PCAN1 PCAN2 PCAN3
117 Levels: PATL1 PATL2 PATL9...
对于每个样本,我都有一个文件,名为:
Pi_Win5kb_JudDP_2020.04.29.vcf_PATL1.windowed.pi
中间带有样本名称(此处为PATL1)
我想为每个样本创建一个数据框,其中第一列是样本的名称(例如,PATL1,在my.ID中列出),第二列是与其相关的数据帧中称为PI的列(在我的示例中:Pi_Win5kb_JudDP_2020.04.29.vcf_PATL1.windowed.pi $ PI。
我尝试了多个循环,更改了一些内容,但从未成功。 我认为这是因为我无法在data.frame命令中正确定义值。
有人可以告诉我如何更改循环以使其起作用吗?
for (i in 1:(length(my.ID))){
my.value <- noquote(paste0("Pi_Win5kb_JudDP_2020.04.29.vcf_",my.ID[i],".windowed.pi$PI"))
cur.file <- data.frame(group=my.ID[i], value=as.name(my.value))
my.name <- my.ID[i]
assign(paste(my.name), cur.file)
}
答案 0 :(得分:0)
生成一堆类似的对象不是一个好主意。使用该对象的列表!
对于您(从您的答案中获得的信息),可能是:
my.files <- list.files(path="Pi1_vcftools_indv/results/", pattern = "Pi_")
my.samples <- read.table("../../Samples/JudDP_sample_info_VCFsorted.2020.05.12.txt", header=TRUE)
my.ID <- my.samples$ID
mydata3 <- function(IDi, filei) {
cur.file <- read.table(file = paste0("Pi1_vcftools_indv/results/",filei), sep = "\t", h=T)
data.frame(group=IDi, value=cur.file)
}
L <- mapply(mydata3, my.ID, my.files)
names(L) <- my.ID
以下是使用setwd()
的变体:
my.samples <- read.table("../../Samples/JudDP_sample_info_VCFsorted.2020.05.12.txt", header=TRUE)
my.ID <- my.samples$ID
setwd("Pi1_vcftools_indv/results/")
my.files <- list.files(pattern = "Pi_")
mydata3 <- function(IDi, filei) {
cur.file <- read.table(file=filei, sep = "\t", header=TRUE)
data.frame(group=IDi, value=cur.file)
}
L <- mapply(mydata3, my.ID, my.files)
names(L) <- my.ID
答案 1 :(得分:0)
我可能会误解您的问题,但这是否就这么简单?
library(dplyr)
library(tibble)
cur.file <- tibble(
group = as.factor(c("PATL1", "PATL2", "PATL9", "PCAN1", "PCAN2", "PCAN3"))
)
dplyr
cur.file <- cur.file %>%
mutate(value = paste0("Pi_Win5kb_JudDP_2020.04.29.vcf_", group,".windowed.pi$PI"))
baseR
cur.file$value <- paste0("Pi_Win5kb_JudDP_2020.04.29.vcf_", cur.file$group, ".windowed.pi$PI")
结果如下:
> cur.file
# A tibble: 6 x 2
group value
<fct> <chr>
1 PATL1 Pi_Win5kb_JudDP_2020.04.29.vcf_PATL1.windowed.pi$PI
2 PATL2 Pi_Win5kb_JudDP_2020.04.29.vcf_PATL2.windowed.pi$PI
3 PATL9 Pi_Win5kb_JudDP_2020.04.29.vcf_PATL9.windowed.pi$PI
4 PCAN1 Pi_Win5kb_JudDP_2020.04.29.vcf_PCAN1.windowed.pi$PI
5 PCAN2 Pi_Win5kb_JudDP_2020.04.29.vcf_PCAN2.windowed.pi$PI
6 PCAN3 Pi_Win5kb_JudDP_2020.04.29.vcf_PCAN3.windowed.pi$PI
答案 2 :(得分:0)
找到了一种方法:
my.files <- list.files(path="Pi1_vcftools_indv/results/", pattern = "Pi_")
for (i in 1:(length(my.files))){
my.samples <- read.table("../../Samples/JudDP_sample_info_VCFsorted.2020.05.12.txt",h=T); my.ID <- my.samples$ID
cur.file <- read.table(file = paste0("Pi1_vcftools_indv/results/",my.files[i]), sep = "\t", h=T)
my.df <- data.frame(group=my.ID[i], value=cur.file)
my.name <- my.ID[i]
assign(paste(my.name), my.df)
}