【发布时间】:2021-09-02 08:43:01
【问题描述】:
我尝试多次运行一段代码 (t1-t13)。由于所有变量名称都以相关时间点的名称开头,因此我尝试编写一个函数,我想在其中简单地替换变量名称中的“t1”,例如 t1_ls_3。为此,我使用 paste 函数将以下代码块转换为一个函数,其中仅应替换时间点。一个简短的例子:
我需要一种方法来更改此行中的 t1:
data$t1_ls_3 <- 11
我试过了,它成功了:
data[paste(“t1”, "ls_3", sep = "_")] <- 11
data <- data[paste(“t1”, "ls_3", sep = "_")]
然后我试着把它写成一个函数:
func_replace <- function(x = “time”) {
data[paste(“time”, "ls_3", sep = "_")] <- 11
data <- data[paste(“time”, "ls_3", sep = "_")]
}
func_replace (x = “t1“)
但是,当我运行该函数时,R 所做的只是将一个新变量放入数据框中,time_ls_3 并且不会更改实际变量 t1_ls_3。 您是否知道问题出在哪里,或者我如何在函数中交换部分变量名?我知道我可以通过使用长格式数据集来解决这个问题。但我想知道如何在函数中交换部分变量。
【问题讨论】:
-
您的问题代码中有“花式引号”,可能是在自动更正它们的过程中的某个步骤。为了使任何事情起作用,您需要用常规引号替换它们。
-
tidyverse 解决方案将使用
rename或rename_with。你说长格式可以避免这个问题是正确的:我敦促你探索它对这个问题和其他问题的好处。 -
至于你的问题,你需要分配函数输出。
data <- func_replace(x = "t1")。我强烈建议使用将data作为参数传递给函数,这样无论调用什么数据,您都可以使用该函数。 -
如果您需要更多帮助,请分享几行数据作为可重现的示例。
-
在函数中将
<-更改为<<-可能会有所帮助。