0

我对 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

我不太确定如何解决这个问题,但我很确定这可能是一个简单的问题。有什么建议么?谢谢!

4

2 回答 2

3

当您第一次运行脚本输入时不存在。分配

input<-c() 

在你的 while 语句之前说或放在 inputfile=input 下面input<- readline....

于 2012-08-07T14:33:55.323 回答
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_nn任意数量的输入文件(我从我的一个程序中取出这段代码,我在其中加载了 csv)。我一直遇到的问题之一是Error当我的代码查找不存在的文件时弹出消息。有了这个循环,这些消息就不会出现。如果它将一个不存在的文件的内容分配给mydata.csv,它只是检查是否mydata.csv是一个列表。如果是,它会继续运行。如果没有,它就会停止。如果您担心在代码中区分来自不同文件的数据,只需将有关文件的任何相关信息插入文件本身的恒定位置即可。例如,在我的 csv 中,我的第 3 列始终包含图像的名称,我从中收集了其余 csv 中包含的信息。

希望这对您有所帮助,即使我看到您已经有了解决方案:-)。如果您希望程序更加自主,这实际上只是一种选择。

于 2012-08-07T14:44:55.270 回答