我正在将论点从shell脚本传递到R脚本和R。
library(rLandsat) #used later in the script
args<-commandArgs(trailingOnly=TRUE)
max_date = Sys.Date()-as.numeric(args[1])
min_date = Sys.Date()-(as.numeric(args[1])+as.numeric(args[2]))
path<-as.numeric(as.character(args[4]))
row<-as.numeric(as.character(args[5]))
cloud<-as.numeric(as.character(args[6]))
foldername<-as.character(args[7])
for(i in args){
print(typeof(i))
}
print(args)
print(c(max_date,min_date,path,row,cloud,foldername))
for(i in c(max_date,min_date,path,row,cloud,foldername)){
print(typeof(i))
}
和R由于某种原因将参数转换为仍然是字符的某种日期类型。这是脚本的输出。 args[3]
稍后会使用,但我可能也应该检查一下。我知道arg
已经是一个字符,但是对于as.numeric()
和path row
,它只返回了cloud
相同的值。前两个参数正确返回"2016-12-31" "2016-01-01"
,但其他两个参数我希望返回的值与原始参数相同。将检出list()
而不是c()
[1] "character"
[1] "character"
[1] "character"
[1] "character"
[1] "character"
[1] "character"
[1] "1048" "365" "Yellowstone" "38" "29"
[6] "20" "2016"
[1] "2016-12-31" "2016-01-01" "1970-02-08" "1970-01-30" "1970-01-21"
[6] "1975-07-10"
[1] "character"
[1] "character"
[1] "character"
[1] "character"
[1] "character"
[1] "character"
答案 0 :(得分:0)
c()
导致了错误。查看MichaelChirico的评论
答案 1 :(得分:0)
您真的应该研究lubridate软件包以进行涉及日期https://github.com/rstudio/cheatsheets/raw/master/lubridate.pdf
的操作根据经验,将数据与不同的类组合在一起时,它们会强制转换为一种格式。这在c()命令中经常发生。在您的情况下,混合日期和数字可能会给您带来混合结果。