簡體   English   中英

在用戶定義的 function 中使用 dataframe 變量作為參數

[英]Using dataframe variable as argument in user-defined function

我想將 dataframe 中的變量傳遞給我寫的 function。 當我手動輸入文件名作為參數時,function 可以使用 gt package 創建一個 png 文件。 但是,當我嘗試在 dataframe 中傳遞包含 function 所需的所有文件名的列時,它會失敗。 我想使用列中的值創建所有需要的 png 文件。

我無法分享真實數據。 下面是虛構和簡化的示例。

創建數據

library(tidyverse)
library(gt)

# function makes png file from dataframe x 
makGt <- function(x) {
  select(x , fName) %>%
    gt(.) %>%
    gtsave(sprintf('fab4%s.png' , x[1,1]))
}

# example data
fName <- c('John' , 'Paul' , 'George' , 'Ringo')
byr <- c(1940 , 1942 , 1943 , 1940)
beatles <- data.frame(fName , byr) %>% arrange(fName)

# make individual files for each beatle
purrr::set_names(beatles %>% 
                   group_by(fName) %>%
                   group_split(), beatles$fName) %>%
  list2env(envir = globalenv())

使用 dataframe George 為 George 保存一個 png 格式的 gt 表

makGt(George) # creates png file for George using function

徒勞的嘗試(許多中的兩個)使用 beatles$fName 中的值創建 png 文件。

# attempts to use beatles fName variable in function makGt
makGt(sprintf('fab4%s' , beatles[1,1])) # results in error
sapply(beatles$fName , FUN = makGt) # error is same as above

對 Tidyverse 友好的代碼將不勝感激或使用 apply 系列。 非常感謝您的幫助。

希望我能正確回答您的問題。

library(tidyverse)
library(gt)

fName <- c('John' , 'Paul' , 'George' , 'Ringo')
byr <- c(1940 , 1942 , 1943 , 1940)
beatles <- data.frame(fName , byr) %>% arrange(fName)

sapply(1:nrow(beatles), function(x) {
  beatles[x, 1, drop = FALSE] %>% 
    gt() %>% 
    gtsave(filename = sprintf('fab4%s.png' , 
                              beatles[x, 1]),
           path = getwd())
})

或者使用 function makGt來適應您的格式

makGt <- function(x) {
  beatles[x, 1, drop = FALSE] %>% 
    gt() %>% 
    gtsave(filename = sprintf('fab4%s.png' , 
                              beatles[x, 1]),
           path = getwd())
}

sapply(1:nrow(beatles), makGt)

這將在您的工作目錄中保存四個名為fab4[fName].png.png文件。 我以fab4George.png為例 output。

fab4喬治

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM