R不必要地将字符转换为日期而不是数字

时间:2019-11-14 16:20:06

标签: r linux

我正在将论点从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"

2 个答案:

答案 0 :(得分:0)

c()导致了错误。查看MichaelChirico的评论

答案 1 :(得分:0)

您真的应该研究lubridate软件包以进行涉及日期https://github.com/rstudio/cheatsheets/raw/master/lubridate.pdf

的操作

根据经验,将数据与不同的类组合在一起时,它们会强制转换为一种格式。这在c()命令中经常发生。在您的情况下,混合日期和数字可能会给您带来混合结果。