我对R有点新意,对我正在尝试编写的程序有疑问。我希望通过while循环(最终在每个文件中使用read.table)接收文件(尽可能多的用户喜欢),但它一直在打破我。 以下是我到目前为止的情况:
cat("Please enter the full path for your files, if you have no more files to add enter 'X': ")
fil<-readLines(con="stdin", 1)
cat(fil, "\n")
while (!input=='X' | !input=='x'){
inputfile=input
input<- readline("Please enter the full path for your files, if you have no more files to add enter 'X': ")
}
if(input=='X' | input=='x'){
exit -1
}
当我运行它时(从命令行(UNIX))我得到这些结果:
> library("lattice")
>
> cat("Please enter the full path for your files, if you have no more files to add enter 'X': ")
Please enter the full path for your files, if you have no more files to add enter 'X': > fil<-readLines(con="stdin", 1)
x
> cat(fil, "\n")
x
> while (!input=='X' | !input=='x'){
+ inputfile=input
+ input<- readline("Please enter the full path for your files, if you have no more files to add enter 'X': ")
+ }
Error: object 'input' not found
Execution halted
我不太确定如何解决问题,但我很确定这可能是一个简单的问题。 有什么建议? 谢谢!
答案 0 :(得分:3)
当您第一次运行脚本输入时不存在。分配
input<-c()
在你的while语句之前说或者说
inputfile=input
低于input<- readline....
答案 1 :(得分:1)
我不确定您的问题的根本问题是什么。可能是您输入的目录路径不正确。
这是我用了几次的解决方案。它使用户更容易。基本上,您的代码不需要用户输入,只需要您对文件有一定的命名约定即可。
setwd("Your/Working/Directory") #This doesn't change
filecontents <- 1
i <- 1
while (filecontents != 0) {
mydata.csv <- try(read.csv(paste("CSV_file_",i,".csv", sep = ""), header = FALSE), silent = TRUE)
if (typeof(mydata.csv) != "list") { #checks to see if the imported data is a list
filecontents <- 0
}
else {
assign(paste('dataset',i, sep=''), mydata)
#Whatever operations you want to do on the files.
i <- i + 1
}
}
正如您所看到的,文件的命名约定是CSV_file_n
,其中n
是任意数量的输入文件(我从我的一个程序中获取此代码,其中我加载了csv) 。当我的代码查找不存在的文件时,我遇到的一个问题是Error
消息弹出。通过此循环,不会出现这些消息。如果它将不存在的文件的内容分配给mydata.csv
,它只会检查mydata.csv
是否为列表。如果是,它继续运行。如果没有,它就会停止。如果您担心区分代码中不同文件的数据,只需在文件本身的常量位置插入有关该文件的任何相关信息。例如,在我的csv中,我的第3列总是包含图像的名称,我从中收集了其余csv中包含的信息。
希望这对你有所帮助,即使我看到你已经有了解决方案:-)。如果您希望您的程序更加自主,那么这只是一个选项。