首页 > 解决方案 > 将函数应用于名称为字符串的所有变量

问题描述

假设你有 3 个变量,即

VAR1 = 3
VAR2 = 4
VAR3 = 2

有没有办法将名称中带有字符串“VAR”的所有变量转换为字符?

标签: r

解决方案


通常,人们会尝试将这些变量分组到一个列表中,但如果没有,我们可以这样做:

for(nm in ls(pattern = "^VAR")) .GlobalEnv[[nm]] <- as.character(.GlobalEnv[[nm]])

不是全球环境的环境

如果您在不是全局环境的环境中拥有这些,请按如下方式进行修改。函数体的第一行定义了测试数据,下一行为e方便起见将当前环境放入一个变量中,之后的行执行转换。最后,我们检查变量已转换为什么。

f <- function() {
  VAR1 <- 1; VAR2 <- 2; VAR3 <- 3  # test data
  e <- environment()  # current environment
  for(nm in ls(pattern = "^VAR")) e[[nm]] <- as.character(e[[nm]])
  str(VAR1); str(VAR2); str(VAR3)  # check results 
}
f()

列表

如果您可以将它们安排在列表中,那么:

L <- list(VAR1 = 1, VAR2 = 2, VAR3 = 3) # test data
L <- lapply(L, as.character)

或者如果有一些元素不需要处理:

L2 <- list(VAR1 = 1, VAR2 = 2, VAR3 = 3, other = 4) # test data
ix <- grep("^VAR", names(L2))
L2[ix] <- lapply(L2[ix], as.character)

如果您不想覆盖L并且L2- 覆盖往往会使调试更加困难 - 然后使用Lnew <- lapply(L, as.character)andL2new <- replace(L2, ix, lapply(L2[ix], as.character))代替。


推荐阅读