我想使用一個函式從資料集中提取變數,然后另存為新的 txt 檔案。我使用的 R 代碼mtcars如下。
保存這個新的 txt 檔案時遇到問題。因為我的var1是am,我希望新的檔案名是output_am1.txt。如果我使用vsasvar1那么我希望新檔案名為output_vs1.txt.
換句話說,我想在我的輸入變數周圍添加引號,以便它可以作為新檔案名的一部分使用paste0.
library(tidyverse)
library(janitor)
library(skimr)
f1 = function(dataset, var1, var2){
# Use tabyl to check var1
print(tabyl(dataset, {{var1}}))
# Create a new dataset by keeping those var1 == 1
df = dataset %>% filter({{var1}} == 1)
print(tabyl(df, {{var1}}))
df1 = df %>% select(mpg, cyl, disp, hp, drat, {{var1}}, {{var2}})
# Get a summary of this new dataset using skim():
skim(df1)
# Output as a txt file:
write.table(df1,
paste0("Desktop/output_",
var1, # !! Where I ran into problem
"1.txt"),
sep = "\t", row.names = F, quote = F)
}
f1(mtcars, var1 = am, var2 = carb)
uj5u.com熱心網友回復:
一種選擇是使用rlang::ensymto convert to a symbol 和rlang::as_labelto convert to a character:
library(tidyverse)
tmp <- tempdir()
f1 <- function(dataset, var1, var2) {
df <- dataset %>% filter({{ var1 }} == 1)
df1 <- df %>% select(mpg, cyl, disp, hp, drat, {{ var1 }}, {{ var2 }})
write.table(df1,
paste0(
paste0(tmp, "/output_"),
rlang::as_label(rlang::ensym(var1)),
"1.txt"
),
sep = "\t", row.names = F, quote = F
)
}
f1(mtcars, var1 = am, var2 = carb)
list.files(tmp, "\\.txt")
#> [1] "output_am1.txt"
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/535596.html
