r - 如何在R中的函数中交换部分变量名?
问题描述
我尝试多次运行一段代码(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。您是否知道问题出在哪里,或者我如何在函数中交换部分变量名?我知道我可以通过使用长格式数据集来解决这个问题。但我想知道如何在函数中交换部分变量。
解决方案
您的基本误解似乎是关于字符串和符号。
"
在 R 中用or定义一个字符串'
。因此如下:
"time"
是一个字符串,其中包含单词 time。
相反,符号是可以引用 R 中的对象的名称。您可以创建一个符号(指向一个对象)来保存一个称为时间的时间,如下所示:
time <- "03:00"
当你time
在控制台输入时,你会得到字符串:
time
#"03:00"
因此,当您尝试使用paste
with 时"time"
,无论如何都会得到相同的结果:
paste("time", "ls_3", sep = "_")
#[1] "time_ls_3"
相反,您似乎想使用x
哪个是您的函数分配"t1"
给的符号。
也许您的数据看起来像这样:
data <- setNames(data.frame(t(rep(0,5))),sapply(1:5,\(x)paste0("t",x,"_ls_3")))
data
# t1_ls_3 t2_ls_3 t3_ls_3 t4_ls_3 t5_ls_3
#1 0 0 0 0 0
最后一个问题是函数内部的赋值只能在函数环境中起作用,所以需要用到<<-
操作符。
func_replace <- function(x = NULL) {
data[paste(x, "ls_3", sep = "_")] <<- 11
}
func_replace(x = “t1“)
data
# t1_ls_3 t2_ls_3 t3_ls_3 t4_ls_3 t5_ls_3
#1 11 0 0 0 0
推荐阅读
- bash - Bash 在键后获取单词
- python-3.x - Python shelve get() 和 keys() 方法返回不一致的结果
- html - 如何让我的联系表格电子邮件正常工作并显示信息?
- discord - Discord.py 音乐机器人队列
- c# - 应用程序初始化 SQL 连接时发生 System.TypeInitializationException
- mongodb - 如何在 mongodb 中保存模式定义
- python - 检测 google sheet 中的变化并执行 actionsheet API
- kernel-density - 有没有一种可靠的方法来计算一组轨迹的概率密度函数?
- api - 在 api 中进行身份验证时遇到问题
- regex - 带有扩展字符的缓冲区字竞争配置(neovim)