【问题标题】:Substitute/Placeholder Variable in R SyntaxR 语法中的替换/占位符变量
【发布时间】:2020-06-03 00:48:10
【问题描述】:

我有以下问题:

对于不同的变量集,我需要一遍又一遍地使用相同的语法。 它们都具有相同的“核心”名称(例如:variable_1)和不同的后缀,例如:

variable_1_a,   variable_1_b,   variable_1_c,   variable_1_d,   variable_1_e, ...

由于语法很大,我需要为(示例)变量 _2、_3、_4、_5 等运行它,我想知道是否有某种形式的占位符表达式可以定义我每次都想用它运行它的“核心”名称,而不是复制粘贴整个语法并用下一个核心名称替换每个“variable_1”。

例如,将核心名称保存为 !XY! (“!”只是表示它是非典型的)并且在整个语法中带有该术语,并附有“_a”,“_b”,“_c”

!XY!_a, !XY!_b, !XY!_c, !XY!_d, !XY!_e, ...

我尝试将核心名称保存在一个名为 XY 的元素中并将其粘贴到结尾:

XY <- "variable_1"
paste0(as.character(XY),"_a") 
"variable_1_a"

as.symbol(paste0(as.character(XY),"_a")) 
variable_1_a

当然,这看起来很长,但如果它也可以用作表达式,我可以像变量一样使用它,我会接受:例如读取或写入它会导致错误。

as.symbol(paste0(as.character(XY),"_a")) <- "test"
Error in as.symbol(paste0(as.character(XY),"_a")) <- "test" : 
could not find function "as.symbol<-"

如果有机会编写一种语法来适应所有程序,那将是一个巨大的节省时间! 非常感谢您的想法!

【问题讨论】:

  • 不确定我是否理解你的目标,但是 paste0 是矢量化的,所以如果你想要一个字符向量,你可以使用 paste0("variable_1_", letters)?
  • 这个想法是每次只交换/替换变量名的一部分,同时保留结尾/后缀 - 而不是所有的复制粘贴,我一直在寻找一个类似的解决方案,每次只需一个更改- “字母”是变量中必须保持不变的部分,每次只有第一部分必须更改 - 不幸的是 paste0 只是创建了正确的表达式,但我不能像纯文本一样使用它- 即像一个完整的变量名

标签: r syntax workflow substitution


【解决方案1】:

假设您有 5 个变量(“variable_1”、“variable_2”等)和 4 个字母(“_a”、“_b”等)。

我们可以使用outer 喜欢:

n <- 1:5
l <- letters[1:4]

c(outer(n, l, function(x, y) paste("variable", x, y, sep = "_")))
#Or a bit shorter : 
#paste0("variable_", c(outer(n, l, paste, sep = "_")))

#[1] "variable_1_a" "variable_2_a" "variable_3_a" "variable_4_a"
#[5] "variable_5_a" "variable_1_b" "variable_2_b" "variable_3_b"
#[9] "variable_4_b" "variable_5_b" "variable_1_c" "variable_2_c"
#[13] "variable_3_c" "variable_4_c" "variable_5_c" "variable_1_d"
#[17] "variable_2_d" "variable_3_d" "variable_4_d" "variable_5_d"

【讨论】:

  • 谢谢!实际上变量名和“字母”是多种多样的——这只是为了说明。我实际上已经在数据集中有了它们,只是想在语法中处理它们并使用它们中的一些。通常我必须复制粘贴整个语法并用下一个替换每个变量词干(或核心变量名),同时将后缀 _a _b _c 等保留在语法中的正确位置......
  • 你能不能把它们分配给nl。例如,如果您的数据集称为 df 和列 col ,您可以执行 n &lt;- df$col
猜你喜欢
  • 2012-05-11
  • 1970-01-01
  • 1970-01-01
  • 2011-12-20
  • 2020-10-16
  • 1970-01-01
  • 2014-08-21
  • 2013-04-08
  • 1970-01-01
相关资源
最近更新 更多