我想分别分析75个数据文件,但所有方法都相同。我为分析的每个步骤编写了函数。数据集基本上是这样的:
df = data.frame(
Time = c(1, 2, 3, 4),
Concentration = c(2983, 9848, 2894, 8384))
我要求用户提供文件名,我想在功能中输入所选的文件名。
enterFileName <- function(){
filename <- readline(prompt="Enter file name: ")
return(filename)}
对此我有两个问题:
是否可以编写代码,以便在运行该函数时使用该函数自动使用用户输入的文件名(使用之前创建的变量“ filename”)?因此,我不必每次都重复输入文件名。我试过了,但是没用:
averageFun <- function(){
summary(filename$Concentration)}
enterFileName()
averageFun()
Error in summary(filename$Concentration) : object 'filename' not found
我可以使用用户为ggplot图表中的主标题输入的文件名吗?像这样...
plotFirst <- function(df){
ggplot(data = df, aes(x = Time, y = Number)) + geom_line() +
ggtitle("UFP concentrations raw data" + filename)
}
这只会返回没有主标题的图形。
有人可以帮我吗?预先感谢!
答案 0 :(得分:2)
enterFileName()
没有副作用,您没有在工作区中创建任何名为filename
的变量。
似乎您是在引用变量,将其称为文件名,这很令人困惑,但是您应该从这里找到自己的方式:
解决方案1,使用变量
df = data.frame(
Time = c(1, 2, 3, 4),
Concentration = c(2983, 9848, 2894, 8384))
enterFileName <- function(){
filename <- readline(prompt="Enter file name: ")
return(filename)}
averageFun <- function(filename){
summary(get(filename)$Concentration)}
filename <- enterFileName() # we enter 'df' (without quotes)
averageFun(filename)
# Min. 1st Qu. Median Mean 3rd Qu. Max.
# 2894 2961 5684 6027 8750 9848
plotFirst <- function(df, filename){
library(ggplot2)
ggplot(data = df, aes(x = Time, y = Concentration)) + geom_line() +
ggtitle(paste("UFP concentrations raw data" ,filename))
}
plotFirst(df,filename)
解决方案2,使用选项
enterFileName <- function(){
options(myproject.filename = readline(prompt="Enter file name: "))
}
averageFun <- function(){
summary(get(getOption("myproject.filename"))$Concentration)}
filename <- enterFileName() # we enter 'df' (without quotes)
averageFun()
# Min. 1st Qu. Median Mean 3rd Qu. Max.
# 2894 2961 5684 6027 8750 9848
plotFirst <- function(df){
library(ggplot2)
ggplot(data = df, aes(x = Time, y = Concentration)) + geom_line() +
ggtitle(paste("UFP concentrations raw data" ,getOption("myproject.filename")))
}
plotFirst(df,filename)
答案 1 :(得分:1)
两个问题的答案都是肯定的。
所以您的平均值看起来像
readFile <- function(filename) {
file <- read.csv(file = paste0(filename, ".csv")
return(file)
}
averageFun <- function(filename){
summary(readFile(filename)$Concentration)
}
您必须在函数中添加filename参数
plotFirst <- function(df, filename){
ggplot(data = df, aes(x = Time, y = Number)) + geom_line() +
ggtitle("UFP concentrations raw data" + filename)
}