我创建了R函数,用于从数据库加载数据。该功能的一部分看起来像这样
var client = mqtt.connect('mqtt://192.168.0.22')
我想允许用户使用函数中的解析参数来更改代码中所有出现的“ sk”。通常,我使用合并变量和字符串paste()函数的方法,但是我没有在这里发现如何做到这一点。
例如,如果用户调用将调用此函数
cars <- function(sk) {
get_data <- tbl(ff_ba, "sk_cars") %>%
filter(id %in% sk_cars_ids$id) %>%
collect()
return(get_data)
}
函数内部的代码应为
cars(us)
答案 0 :(得分:0)
无法访问数据库,我无法确认它是否有效,但是我认为您将能够使用deparse(substitute())
和get()
来完成所需的工作。这是一个使用mtcars
数据集的愚蠢示例。
首先,一些过滤数据框代替了x_cars_ids
数据框:
mpg_values <- data.frame(values = c(27.3, 30.4, 33.9))
disp_values <- data.frame(values = 100:300)
现在该功能,注释中有详细信息:
custom_filter <- function(prefix) {
# Convert the input to a string value
input <- deparse(substitute(prefix))
# Use get to call the correct filtering df
filter_df <- get(paste(input, "_values", sep = ""))
# Subset using the string value
out <- mtcars[mtcars[input] > 25, ] %>%
# filter using the df called by 'get', treating
# the input as our desired filtering variable
# just for this example
filter(get(input) %in% filter_df$values)
return(out)
}
现在使用适当的变量名称调用该函数将基于该变量过滤mtcar:
> custom_filter(mpg)
mpg cyl disp hp drat wt qsec vs am gear carb
1 30.4 4 75.7 52 4.93 1.615 18.52 1 1 4 2
2 33.9 4 71.1 65 4.22 1.835 19.90 1 1 4 1
3 27.3 4 79.0 66 4.08 1.935 18.90 1 1 4 1
4 30.4 4 95.1 113 3.77 1.513 16.90 1 1 5 2
> custom_filter(disp)
mpg cyl disp hp drat wt qsec vs am gear carb
1 21.0 6 160 110 3.90 2.620 16.46 0 1 4 4
2 21.0 6 160 110 3.90 2.875 17.02 0 1 4 4
3 22.8 4 108 93 3.85 2.320 18.61 1 1 4 1
4 21.4 6 258 110 3.08 3.215 19.44 1 0 3 1
5 18.1 6 225 105 2.76 3.460 20.22 1 0 3 1
6 19.7 6 145 175 3.62 2.770 15.50 0 1 5 6
7 21.4 4 121 109 4.11 2.780 18.60 1 1 4 2
希望这能使您指向正确的方向。