【问题标题】:R macros to enable user defined input similar to %let in SASR 宏以启用类似于 SAS 中的 %let 的用户定义输入
【发布时间】:2016-11-16 22:53:47
【问题描述】:

我正在尝试自动化 R 中的特定过程,其中基本上代码保持不变,但导入的输入文件发生了变化——路径和大部分文件名相同,只有一个单词变化——并且某些变量名称发生变化。 我想进行用户定义的这些更改:就像 SAS 中的 %let 一样。我可以用 & 调用一个值。

例如,如果我有这个特定的导入代码:

Category_sales<- read.csv("C:/Projects/Consumption curves/UKPOV/excel files/MSP_product_CC_2009_salespercap.csv")

我只想根据用户的需要更改 MSP 这个词。 在 SAS 中,我会定义一个宏变量,例如 %let metric=MSP

并将代码替换为

`C:/Projects/Consumption curves/UKPOV/excel files/&metric_product_CC_2009_salespercap.csv`

另外,如果我有一个变量说 MaxGNI 并且我希望只有 GNI 部分像 Max&econvar 那样由用户定义/替换,我可以在其中拥有 econvar 定义为 %let econvar= GNI 或任何其他指标。

不过,我正在 R 中寻找类似的东西。

【问题讨论】:

  • 可能是file.choose(),或者使用metric &lt;- "MSP",然后使用myCSV &lt;- paste("C:/x/y/", metric, "blabla.csv")创建文件路径,然后使用Category_sales &lt;- read.csv(myCSV)

标签: r automation macros sas user-defined-functions


【解决方案1】:

您可以使用paste0 函数完成此任务。

metric <- "MSP"
infile <- paste0("C:/Projects/Consumption curves/UKPOV/excel files/",metric,"_product_CC_2009_salespercap.csv")
Category_sales <- read.csv(infile)

或封装在函数中

readCSV <- function(var) {
       metric <- var
       infile <- paste0("C:/Projects/Consumption curves/UKPOV/excel files/",metric,"_product_CC_2009_salespercap.csv")
       return(infile)

}

Category_sales <- read.csv(readCSV('MSP'))

您可以对字符串中需要替换的所有位应用相同的逻辑。

关于变量名你可以这样做:

eval(parse(....)) 可以工作

data1 <- data.frame(column1 = 1:10, column2 = letters[1:10])
txt <- "data1$column2"

> eval(parse(text = txt))
 [1] a b c d e f g h i j
Levels: a b c d e f g h i j

对于您的特定情况,您可以将 txt 替换为相同的 paste0 逻辑来构建您的变量名称。

this SO Q/A中的完整解释

希望对你有帮助

【讨论】:

  • 第一个解决方案很棒。但是,我也想知道这对于诸如 say 之类的变量是否可行。 Min_max_Ratio_smoothGNI
  • 您打算如何使用这些变量?报告?造型?你可以遵循相同的逻辑
  • 我已经扩展了我的答案以涵盖您原始问题的第二部分
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-07-16
  • 2013-06-18
  • 2021-01-01
  • 2011-03-27
  • 1970-01-01
  • 1970-01-01
  • 2014-03-13
相关资源
最近更新 更多