R宏使用户定义的输入类似于SAS中的%let

时间:2016-07-14 06:41:03

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

我正在尝试自动化R中的特定进程,其中代码保持不变,但导入的输入文件发生变化 - 路径和大多数文件名相同,只有一个单词发生变化 - 某些变量名称发生变化。 我想用户定义这些更改:很像SAS中的%let。我可以用&。来调用一个值。

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

for 3 slashes:
   first item: this.items.push(item)
   sec. item : this.items[0].children.push(item)
   third. item: this.items[0].children[0].children.push(item)

for x slashes:
   ???

我希望只根据用户想要的内容改变MSP这个词。 在SAS中,我会定义一个宏变量,比如说%let metric = MSP

并将代码替换为

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

此外,如果我有一个变量说 MaxGNI ,我希望只有GNI部分是用户定义/替换的,如 Max&amp; econvar ,我可以 econvar 定义为%let econvar = GNI 或任何其他指标。

我在R中寻找类似的东西。

1 个答案:

答案 0 :(得分: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

中的完整说明

希望有所帮助