Tôi có dữ liệu chuỗi thời gian csv cho một số trang web mà tôi tạo ggplots, hiển thị thay đổi trong phương tiện bằng cách sử dụng gói thay đổi. Tôi đã viết một hàm nhận csv, thực hiện một số phép tính để có được các phương tiện sau đó lặp qua các trang web tạo ra một âm mưu cho mỗi. Vấn đề của tôi là một đối tượng được tạo trong vòng lặp for không được tìm thấy.Đối tượng được tạo bên trong hàm không tìm thấy bởi ggplot
Một ví dụ rất đơn giản dưới nhưng tạo ra các lỗi tương tự:
df1 <- data.frame(date = seq(as.Date("2015-01-01"), as.Date("2015-01-10"),
by = "day"),
site1 = runif(10),
site2 = runif(10),
site3 = runif(10))
example <- function(df1){
sname <- names(df1)[-1]
for (i in 1:length(sname)){
df2 <- df1[,c(1, 1+i)]
df2$label <- factor(rep("ts", by=length(df2[,1])))
plot <- ggplot()+
geom_point(data=df2, aes(x=date, y=df2[,2]))+
geom_line(data=df2, aes(x=date, y=df2[,2]))
sname.i<-sname[i]
filename<-paste0(sname.i, "-test-plot.pdf")
ggsave(file=filename, plot)
}
}
example(df1)
Các lỗi tôi nhận được là: "Lỗi trong eval (expr, envir, enclos): đối tượng 'df2' không tìm thấy"
Tôi không hoàn toàn chắc chắn vấn đề là gì vì tôi đã tạo ra các vòng tương tự đã hoạt động trong quá khứ. Nếu tôi gán một giá trị cho i và bước qua mã trong vòng lặp nó hoạt động tốt. Tôi đang nghĩ một vấn đề môi trường? Hay là ggsave đang làm gì đó lung linh? Bất kỳ trợ giúp/con trỏ biết ơn nhận được. Cảm ơn.
Khi tôi chạy mã của bạn, vấn đề là 'sname'. Nếu không có biến này được định nghĩa, 'i' cũng vẫn chưa được xác định, và điều tương tự xảy ra với' df2'. – vaettchen
@vaettchen. Bạn đã chạy toàn bộ chức năng hay chỉ là vòng lặp?Tôi đã chạy lại chức năng ví dụ trên máy tính ở nhà của mình và vẫn gặp lỗi như đã nêu ở trên. Nó không cho tôi trên df2. – Bart
đã chỉnh sửa tiêu đề câu hỏi để chỉ định vấn đề chính xác. –