我编写了一个小函数,通过循环遍历每个变量并在其周围粘贴各种标点符号来帮助重命名列,以便将文本发送到控制台。然后可以将其复制到我的脚本中,并根据需要重命名变量。这是函数:
library(tidyverse)
tidy_rename <- function (df) {
df_name <- deparse(substitute(df))
names(df) <- tolower(names(df))
cat(paste(df_name, " <- ", paste(df_name, "%>%nt rename(")))
for (i in names(df)) {
cat(paste("tt", paste(paste("=", paste(paste('"', i), '"'))), ","), sep="n")
}
writeLines(")"
)
}
如果我在数据集上使用它:
test_df <- data.frame("VarIable 1" = c(1), "sizrd" = c(1), "dat 1" = c(1),
"x-cord" = c(1), "y-crf" = c(1), "aGe" = c(1), check.names=F)
tidy_rename(test_df)
它给出了以下内容,可以复制并粘贴到脚本中:
test_df <- test_df %>%
rename( = " variable 1 " ,
= " sizrd " ,
= " dat 1 " ,
= " x-cord " ,
= " y-crf " ,
= " age " ,
)
我想要的是将此输出自动复制到函数内的剪贴板。我不确定如何在forloop
周围使用writeClipboard
.这不起作用:
tidy_rename <- function (df) {
df_name <- deparse(substitute(df))
names(df) <- tolower(names(df))
writeClipboard(
cat(paste(df_name, " <- ", paste(df_name, "%>%nt rename(")))
for (i in names(df)) {
cat(paste("tt", paste(paste("=", paste(paste('"', i), '"'))), ","), sep="n")
}
writeLines(")"
)
)
}
有什么建议吗?
扩展我的评论以消除任何混淆。
一种方法或建议是将字符串存储在变量中,然后可以在最后输出。请注意,cat(...)
value
为 NULL(它不返回字符串(。这需要 2 个变量,让我们称它们为str
和newstr
.我将str
存储要复制的整个字符串,并newstr
存储cat(...)
输出的当前字符串。
tidy_rename <- function (df) {
df_name <- deparse(substitute(df))
names(df) <- tolower(names(df))
str <- paste(df_name, " <- ", paste(df_name, "%>%nt rename("))
cat(str)
for (i in names(df)) {
#Store variable at each iteration and expand str. Output newstr.
newstr <- paste("tt", paste(paste("=", paste(paste('"', i), '"'))), ",")
str <- paste(str, newstr, sep = "n")
cat(newstr, sep="n")
}
newstr <- ")"
str <- paste0(str, newstr)
cat(newstr)
writeClipboard(str)
}
请注意每次迭代时输出如何存储在str
中,但输出newstr
。
作为旁注,我建议OP检查paste
的collapse
参数(或者paste0
(。我没有完整的概述,但如果字符串在其中一个函数调用中折叠,这似乎可以消除 2 - 3 次调用paste
。