R 宏以启用类似于 SAS 中的 %let 的用户定义输入
R macros to enable user defined input similar to %let in SAS
我正在尝试在 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 部分是用户 defined/replaced,例如 Max&econvar 我可以将 econvar 定义为 %let econvar= GNI 或任何其他指标。
不过,我正在寻找 R 中的类似内容。
您可以使用 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
中的完整解释
希望对您有所帮助
我正在尝试在 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 部分是用户 defined/replaced,例如 Max&econvar 我可以将 econvar 定义为 %let econvar= GNI 或任何其他指标。
不过,我正在寻找 R 中的类似内容。
您可以使用 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
中的完整解释希望对您有所帮助