如何评估字符串作为 R 中的变量?
How to evaluate a string as a variable in R?
也许这是一个愚蠢的问题,但我找不到解决方案。
我想使用 paste()
传递变量名,并使用变量名来评估 dplyr::filter()
内的不等式,但它 returns 0 行,而不是我预期的输出
我尝试使用 eval()
和 as.formula()
但没有成功
library(dplyr)
dcl <- '07'
xdecil <- paste('detr0', dcl, sep='')
final_cust <- cd_probs %>% filter(final_prob>=xdecil)
我们可以将变量名的字符串表示形式转为符号并用!!
取消引号:
library(dplyr)
library(rlang)
varname <- 'mpg'
mtcars %>%
filter(qsec >= !!sym(varname))
或者 as.name
如果我们不想加载 rlang
:
library(dplyr)
varname <- 'mpg'
mtcars %>%
filter(qsec >= !!as.name(varname))
输出:
mpg cyl disp hp drat wt qsec vs am gear carb
1 18.1 6 225.0 105 2.76 3.460 20.22 1 0 3 1
2 14.3 8 360.0 245 3.21 3.570 15.84 0 0 3 4
3 22.8 4 140.8 95 3.92 3.150 22.90 1 0 4 2
4 17.8 6 167.6 123 3.92 3.440 18.90 1 0 4 4
5 16.4 8 275.8 180 3.07 4.070 17.40 0 0 3 3
6 17.3 8 275.8 180 3.07 3.730 17.60 0 0 3 3
7 15.2 8 275.8 180 3.07 3.780 18.00 0 0 3 3
8 10.4 8 472.0 205 2.93 5.250 17.98 0 0 3 4
9 10.4 8 460.0 215 3.00 5.424 17.82 0 0 3 4
10 14.7 8 440.0 230 3.23 5.345 17.42 0 0 3 4
11 15.5 8 318.0 150 2.76 3.520 16.87 0 0 3 2
12 15.2 8 304.0 150 3.15 3.435 17.30 0 0 3 2
13 13.3 8 350.0 245 3.73 3.840 15.41 0 0 3 4
虽然我同意@avid_useR的解决方案,但我分享一些我的想法:
如果我对您的问题的理解正确,您希望 xdecil
对象指向另一个名为 detro007
且具有特定值的现有变量?如果是这种情况,您可以使用 ?get()
函数将现有 detro007
变量的值分配给您创建的变量。
尝试:
library(dplyr)
dcl <- '07'
xdecil <- get(paste('detr0', dcl, sep=''))
final_cust <- cd_probs %>% filter(final_prob>=xdecil)
也许这是一个愚蠢的问题,但我找不到解决方案。
我想使用 paste()
传递变量名,并使用变量名来评估 dplyr::filter()
内的不等式,但它 returns 0 行,而不是我预期的输出
我尝试使用 eval()
和 as.formula()
但没有成功
library(dplyr)
dcl <- '07'
xdecil <- paste('detr0', dcl, sep='')
final_cust <- cd_probs %>% filter(final_prob>=xdecil)
我们可以将变量名的字符串表示形式转为符号并用!!
取消引号:
library(dplyr)
library(rlang)
varname <- 'mpg'
mtcars %>%
filter(qsec >= !!sym(varname))
或者 as.name
如果我们不想加载 rlang
:
library(dplyr)
varname <- 'mpg'
mtcars %>%
filter(qsec >= !!as.name(varname))
输出:
mpg cyl disp hp drat wt qsec vs am gear carb
1 18.1 6 225.0 105 2.76 3.460 20.22 1 0 3 1
2 14.3 8 360.0 245 3.21 3.570 15.84 0 0 3 4
3 22.8 4 140.8 95 3.92 3.150 22.90 1 0 4 2
4 17.8 6 167.6 123 3.92 3.440 18.90 1 0 4 4
5 16.4 8 275.8 180 3.07 4.070 17.40 0 0 3 3
6 17.3 8 275.8 180 3.07 3.730 17.60 0 0 3 3
7 15.2 8 275.8 180 3.07 3.780 18.00 0 0 3 3
8 10.4 8 472.0 205 2.93 5.250 17.98 0 0 3 4
9 10.4 8 460.0 215 3.00 5.424 17.82 0 0 3 4
10 14.7 8 440.0 230 3.23 5.345 17.42 0 0 3 4
11 15.5 8 318.0 150 2.76 3.520 16.87 0 0 3 2
12 15.2 8 304.0 150 3.15 3.435 17.30 0 0 3 2
13 13.3 8 350.0 245 3.73 3.840 15.41 0 0 3 4
虽然我同意@avid_useR的解决方案,但我分享一些我的想法:
如果我对您的问题的理解正确,您希望 xdecil
对象指向另一个名为 detro007
且具有特定值的现有变量?如果是这种情况,您可以使用 ?get()
函数将现有 detro007
变量的值分配给您创建的变量。
尝试:
library(dplyr)
dcl <- '07'
xdecil <- get(paste('detr0', dcl, sep=''))
final_cust <- cd_probs %>% filter(final_prob>=xdecil)