![](/img/trans.png)
[英]Parsing and using a string as an argument in a plot inside a user-defined function
[英]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。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.