我正在尝试自动化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中寻找类似的东西。
答案 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
来构建变量名称。
希望有所帮助