我正在尝试从我的本地目录中读取csv文件(其文件名包含某些字符),并将函数应用于所有数据集。
以下是我如何读取文件名以&#34开头的文件; Answer_Worksheet": (在目录C:/ Users / User / Downloads中,有文件名为Answer_Worksheet_19,Answer_Worksheet_20,Answer_Worksheet_21等)。
answercsv <- list.files(path="C:/Users/User/Downloads",
pattern="Answer_Worksheet+.*csv",full.names=FALSE)
answernames <- substr(answercsv,1,nchar(answercsv)-4)
#read files
for(j in answernames){
ansfilepath <- file.path("C:/Users/User/Downloads",paste(j,".csv",sep=""))
assign(j, read.table(ansfilepath,header=TRUE,sep=",",na.strings=c("NA","NaN", " ") ))
}
一个名为&#34; Answer_Worksheet_19&#34;
的示例数据集ID Q1 Q2 Q3 Q4 Q5 Q6 Q7 Q8
491 10 3 1 5 3 1 10 2
491 4
480 10 3 1 33 3 1 10 /
488 4 3 1 5 3 1 10 5
488 3 6
482 5 3 1 10 5
482 10 33 1
492 4 3 1 33 6 2 10 5
488 10 33
488
492 10
492 3 1
509 10 3 1 33 3 1 10 5
498
500 10 3 1 33 3 1 10 5
498
500
503 10 3 1 33 3 1 10 5
498 10 3 1 33 6 1 10 5
要应用的功能:
library(ggplot2)
library(plyr)
answeranalysis<-function(data){
#subset "Q" columns
Q<-data[,grep("Q",names(data))]
for(i in 1:NCOL(Q))
{
#histogram (frequency)
count<-count(Q,i)
colnames(count)[1]<-"ans"
ggsave(ggplot(data=na.omit(count),aes(x=reorder(ans,-freq),y=freq))+geom_bar(stat="identity",fill="dodgerblue")+geom_text(aes(label=freq),vjust=0,size=7)+xlab("Answers")+ylab("Freq")+theme(axis.text=element_text(size=15,face="bold"),axis.title=element_text(size=16)),file=paste("C:/Users/User/Downloads/answer",i,".png",sep=""))
}
}
基本上我遇到了两个问题:
为了将函数answeranalysis应用于数据集,我试图这样做:
markstimelist&LT; -as.list(markstimenames)
lapply(names(markstimelist),function(x)answeranalysis(markstimelist [[x]]))
但显然它不起作用,因为列表中存储的项目只是数据集(字符串,字符串)的名称,而不是数据集本身的名称。 那么,我如何使用字符串访问数据集?
但是,如果我将该函数应用于多个数据集,如何将工作表编号添加到png条形图的名称中?
e.g。 answeranalysis(Answer_Worksheet_19)---&gt;将生成8个png条形图,即worksheet19answer1.png,worksheet19answer2.png等。
谢谢!
答案 0 :(得分:0)
您可以使用函数eval,它将文本评估为变量。
parse
通常会解析文件,但您可以指定文本,例如此处。
EVAL<-function(z){eval(parse(text=z)))}
lapply(names(markstimelist),function(x) clustering(EVAL(x))
您可以添加for循环并以这种方式保存:
for(i in 1:length(worksheet)){
ggsave(paste("worksheet",i,"....png",sep = ""))