2014-10-30 32 views
0

我遇到ggplot2庫中的ggsave()問題。我寫了一個函數來傳遞參數,並且這個函數應該會產生並用ggsave()保存結果。ggave()錯誤:未知輸入R

下面是一些例子數據和代碼重現錯誤:

example.df.1 <- data.frame(matrix(1:100, nrow = 20, ncol = 5)) 
colnames(example.df.1) <- c("var1", "var2", "var3", "var4", "var5") 
rownames(example.df.1) <- c("A", "B", "C", "D", "E", "F", "G", "H", 
          "I", "J", "K", "L", "M", "N", "O", "P", 
          "Q", "R", "S", "T") 

example.df.2 <- data.frame(matrix(ncol = 2, nrow = 24)) 
example.df.2[,1] <- c("A", "B", "C", "D", "E", "F", "G", "H", 
          "I", "J", "K", "L", "M", "N", "O", "P", 
          "Q", "R", "S", "T", "U", "V", "W", "X") 

example.df.2[,2] <- rnorm(24, 10, 2)        

problematic_func <- function(data1, col, title, var, data2) { 
    # only include rows without missing values 
    loc1 <- subset(data1, rowSums(is.na(data1)) == 0) 

    loc1 <- cbind(loc1, rank(-as.data.frame(loc1[,1]), ties.method = "first")) 

    # reduce data2 to only those rows that correspond to rows in data1 
    loc2 <- data2[data2[,1] %in% rownames(loc1),] 

    # order loc2 
    loc2.ordered <- loc2[order(loc2[,1]),] 

    # correlation between loc1 and loc2.ordered 
    corr <- cor(loc1[,1], loc2.ordered[,2]) 

    # creating the plot 
    i <- ggplot(loc1, aes_q(x = loc1[,1], y = loc2.ordered)) 
    i <- i + geom_point(colour = col, size = 4) 
    i <- i + ggtitle(title) 
    i <- i + xlab(var) 
    i <- i + ylab("y-axis") 
    i <- i + coord_cartesian(xlim = c(0, max(loc1[,1])), 
     ylim = c(0, max(loc2.ordered[,2])*1.2)) 
    i <- i + annotate("text", x = max(loc1[,1])*.5, y = 1, 
     label = paste("Correlation coef: ", as.character(corr)), size = 3) 

    # saving the plot - this is where the error occurs according 
    # to the debugger 
    ggsave(filename = paste("my_example_plot_", var, ".png", sep = ""), 
     plot = i, device = png, width = 625, height = 625, limitsize = FALSE) 
} 

for (i in 1:ncol(example.df.1)) { 
    sv <- as.data.frame(example.df.1[,i]) 
    rownames(sv) <- rownames(example.df.1) 
    problematic_func(sv, "orange", colnames(example.df.1[i]), 
     colnames(example.df.1[i]), data2 = example.df.2) 
} 

編輯:對不起,我忘了補充我的錯誤:

Error in FUN(X[[2L]], ...) : Unknown input:data.frame

回答

1

,我發現了自己的錯誤。該錯誤不在ggsave()函數中,而是在我首先創建該圖的ggplot()函數中。正確的代碼必須是:

i <- ggplot(loc1, aes_q(x = loc1[,1], y = loc2.ordered[,2])) 

不同的是,在y審美需求傳遞loc2.ordered,而不是整個數據幀的一列。