Есть несколько проблем, с которыми я столкнулся, нуждающихся в помощи:
, поэтому у меня есть такой tsvfile
intermediate.tsv
experiment control par1 par2 par3
1 a_control 1 11 21
1 b_control 5 12 21
2 a_control 2 11 50
2 b_control 3 13 31
3 a_control 4 11 35
3 b_control 2 11 35
Я прочитал tsvfile так:
tsvfiles<- read.csv2('/path_location/intermediate.tsv', header=T, sep = '\t', stringsAsFactors = F)
преобразовать значение в число c
for(i in 3:ncol(tsvfiles)) {
tsvfiles[,i] <- as.numeric(tsvfiles[, i])
}
Я понимаю, что когда я вызываю tsvfiles $ control, я получаю только 'a' или 'b', что не так уж сложно, но если кто-то может помогите мне исправить это будет здорово
Так как я просто хочу вызвать par * заголовок столбца, я установил переменную col
cols <- names(tsvfiles)[!names(tsvfiles) %in% c('experiment', 'control')]
Затем я хочу, чтобы мой первый столбец был таким :
final_data<- c('Description', 'a_control Mean', 'a_control sd', 'b_control Mean', 'b_control sd', 'plot')
И создать функцию
generate_table<-function(data, col){
a_mean = mean(data[[col]][tsvfiles$control == "a"])
b_mean = mean(data[[col]][tsvfiles$control == "b"])
a_sd = sd(data[[col]][tsvfiles$control == "a"])
b_sd = sd(data[[col]][tsvfiles$control == "b"])
p1 <- ggplot(data, aes(x=control, y= !!sym(col), color = control)) +
geom_violin() + geom_boxplot(width = 0.1) +
geom_jitter(shape = 16, colour = "black", alpha = 0.5, width = 0.2) +
scale_x_discrete(limits = rev(levels(as.factor(data$control)))) +
coord_flip()
column <- c(col, a_mean, a_sd, b_mean, b_sd)
return(column)
}
, когда я делаю лапы
lapply(cols, generate_table, data=tsvfiles)
Я получаю каждый из этих
"par1" "1.15285714285714" "0.0543270519302177" "1.2055" "0.0730879066964102"
"par2" "11.15285714285714" "1.0543270519302177" "12.2055" "3.0730879066964102"
"par3" "31.15285714285714" "5.0543270519302177" "21.2055" "2.0730879066964102"
Теперь вот реальный вопрос
как применить вывод из lapply и добавить его к final_data, как это
Description par1 par2 par3
a_mean 1.15285714285714 11.15285714285714 31.15285714285714
a_sd 0.0543270519302177 1.0543270519302177 5.0543270519302177
b_mean 1.2055 12.2055 21.2055
b_sd 0.0730879066964102 3.0730879066964102 2.0730879066964102
Это раньше, даже не имея строки графика, которую я пробовал
final_data = cbind(final_data , lapply(cols, generate_table, data=tsvfiles))
и я не могу получить в final_data все столбцы из функции,
Спасибо