2015-12-15 2 views
1

Я создаю CSV файл из кадра данных (Df) и запись его с помощью write.csv(df,file="file.csv")Проблема с форматом CSV при отправке с пакетом mailR

фрейм данных содержит имена столбцов с пробелами в них (например, «Дата начала» например). Эти имена правильно разобраны функцией write.csv, а файл csv содержит эти пробелы. Однако, когда я включаю csv в почту, отправленную с помощью функции sent.mail() (с аргументом attach.files=paste(getwd(),"file.csv",sep="")) пакета mailR, пробелы исчезли и были заменены точками (например: Start.Date) при получении электронной почты.
Пример:

df=data.frame(c1=c(1,1),c2=c(2,2)) 
names(df)<-c("c 1","c 2") 
write.csv(df,file="file.csv",row.names=F) 
    send.mail(from = "[email protected]", 
      to = "[email protected]", 
      subject = "Exemple", 
      body = "I attached file.csv", 
      attach.files = paste0(getwd(),"/file.csv"), 
      smtp = list(host.name = "aspmx.l.google.com", port = 25), 
      authenticate = FALSE, 
      send = TRUE) 

Кажется, эта игрушка пример работает правильно, так что я даже больше потерял. Возможно ли, что причиной будет то, что код запускается с сервера? Что здесь происходит? И я могу изменить его? Это мои вопросы.

+0

Пожалуйста, отредактируйте ваш вопрос и сделайте его полностью воспроизводимым примером. – lukeA

ответ

1

В функции read.csv, если вы не указали аргумент check.names = FALSE, имена переменных будут лишены пробелов.

Вот пример того, что я имею в виду:

df <- data.frame(a = rnorm(5)) 

df[["Start Date"]] <- rep(as.Date(Sys.time()), 5) 

write.csv(df, file = "file.csv", row.names = FALSE) 

read.csv("file.csv") 
      a Start.Date 
1 -0.3690216 2015-12-15 
2 -0.4973525 2015-12-15 
3 0.2314902 2015-12-15 
4 0.8877708 2015-12-15 
5 -0.9476200 2015-12-15 

read.csv("file.csv", check.names = FALSE) 
      a Start Date 
1 -0.3690216 2015-12-15 
2 -0.4973525 2015-12-15 
3 0.2314902 2015-12-15 
4 0.8877708 2015-12-15 
5 -0.9476200 2015-12-15 

Теперь, как выясняется, если добавить check.names = FALSE аргумент в вашу send.mail() функцию, вы получите вложение, которое не имеет точек в именах переменных ,

+0

Спасибо за ваш ответ choff! – jean

+0

@jean не проблема :) – christoph

Смежные вопросы