当我学习R的时候,我正试着把它用在我的工作中。我需要绘制142个曲线图并做一些统计。因此,我决定编写以下函数:
Melting <- function(df){
i <- as.character(substitute(df))
df.m<-melt(df)
library(grid, lib.loc = "C:/Program Files/R/R-3.6.2/library")
name_plot = paste(i,".png",sep = "")
png(name_plot, width = 10, height = 9, units = 'in', res = 700)
print(ggplot(data = df.m, aes(x=Tissuetype, y=value)) + geom_boxplot(aes(fill=variable)) + stat_compare_means(aes(group = variable), label = "p.signif") + theme(axis.text.x = element_text(angle = 90)))
dev.off()
}该函数运行良好,并将我的环境中存在的一个数据帧作为输入。例如:熔化(肝脏)在测试函数成功绘制图形后,我决定将其放入一个for循环中,就像我在bash脚本中所做的那样。但是,它会抛出以下错误:
for(i in names){Melting(i)}
Error in FUN(X[[i]], ...) : object 'variable' not found 名称向量的创建方式如下
files = list.files(pattern = "*.csv")
names <-tools::file_path_sans_ext(files)我有一种预感,for循环中的i值正在被替换为字符串,例如:熔化(“肝脏”)而不是参数熔化(肝脏)。但我不知道该怎么克服它。我读了几篇帖子,但都不明白。请帮帮忙
发布于 2020-06-09 21:44:24
感谢@Valerifor帮助我,也感谢@Ronak。对于那些可能面临同样问题的人,最后的代码如下所示
#Reading multiple file list
files = list.files(pattern = "*.csv")
#first making a list of all data frames we wish to have
l <- as.list(tools::file_path_sans_ext(files))
#Loading all files as dataframes together
for(i in l){
filepath <- file.path("E:/shantanu_new_tanta/tissue/facet_data/",paste(i,".csv",sep=""))
assign(i, read.table(filepath,header = FALSE, col.names = c("Tissuetype", "E", "P"), sep = "\t"))
}
#Defining a function that plots boxplot with significance values
Melting <- function(df, name_png){
df.m<-melt(df)
library(grid, lib.loc = "C:/Program Files/R/R-3.6.2/library")
name_plot = paste(name_png,".png",sep = "")
png(name_plot, width = 10, height = 9, units = 'in', res = 700)
print(ggplot(data = df.m, aes(x=Tissuetype, y=value)) + geom_boxplot(aes(fill=variable)) + stat_compare_means(aes(group = variable), label = "p.signif") + theme(axis.text.x = element_text(angle = 90)))
dev.off()
}
#Running function on all files in a single go
for(i in 1:3){Melting(get(l[[i]]), l[[i]])}https://stackoverflow.com/questions/62278119
复制相似问题