Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
是否可以将参数组合到在R中以编程方式生成的子集函数中?_R_Dataframe_Subset - Fatal编程技术网

是否可以将参数组合到在R中以编程方式生成的子集函数中?

是否可以将参数组合到在R中以编程方式生成的子集函数中?,r,dataframe,subset,R,Dataframe,Subset,在我提问之前,这里有一点背景 我正在创建一个通用数据成形和图表库,用于绘制特定格式的测量数据 作为脚本的一部分,我在数据帧上使用subset函数。我的工作方式是,我有一个参数文件,可以在其中将此子集标准传递到我的函数中(因此我不需要直接编辑我的主库)。我的做法如下: subset_criteria <- expression(variable1 != "" & variable2 == TRUE) my.subset <- subset(my.data, eval(sub

在我提问之前,这里有一点背景

我正在创建一个通用数据成形和图表库,用于绘制特定格式的测量数据

作为脚本的一部分,我在数据帧上使用subset函数。我的工作方式是,我有一个参数文件,可以在其中将此子集标准传递到我的函数中(因此我不需要直接编辑我的主库)。我的做法如下:

subset_criteria <- expression(variable1 != "" & variable2 == TRUE) 
my.subset <- subset(my.data, eval(subset_criteria))

subset\u标准您可能应该避免两件事:在非交互式设置中使用
subset
(请参见帮助页面中的警告)和
eval(parse())
。我们开始吧

您可以将表达式更改为字符串,并根据需要附加它。诀窍是将字符串转换回表达式。这就是前面提到的
parse
的作用

sub1 <- expression(Species == "setosa")

subset(iris, eval(sub1))

sub2 <- paste(sub1, '&', 'Petal.Width > 0.2')

subset(iris, eval(parse(text = sub2)))  # your case

> subset(iris, eval(parse(text = sub2)))
   Sepal.Length Sepal.Width Petal.Length Petal.Width Species
6           5.4         3.9          1.7         0.4  setosa
7           4.6         3.4          1.4         0.3  setosa
16          5.7         4.4          1.5         0.4  setosa
17          5.4         3.9          1.3         0.4  setosa
18          5.1         3.5          1.4         0.3  setosa
19          5.7         3.8          1.7         0.3  setosa
20          5.1         3.8          1.5         0.3  setosa
22          5.1         3.7          1.5         0.4  setosa
24          5.1         3.3          1.7         0.5  setosa
27          5.0         3.4          1.6         0.4  setosa
32          5.4         3.4          1.5         0.4  setosa
41          5.0         3.5          1.3         0.3  setosa
42          4.5         2.3          1.3         0.3  setosa
44          5.0         3.5          1.6         0.6  setosa
45          5.1         3.8          1.9         0.4  setosa
46          4.8         3.0          1.4         0.3  setosa
sub1子集(iris,eval(parse(text=sub2)))
萼片。长萼片。宽花瓣。长花瓣。宽种
6 5.4 3.9 1.7 0.4刚毛
7.4.6 3.4 1.4 0.3刚毛
16 5.7 4.4 1.5 0.4刚毛
17 5.4 3.9 1.3 0.4刚毛
18 5.1 3.5 1.4 0.3刚毛
19 5.7 3.8 1.7 0.3刚毛
20 5.1 3.8 1.5 0.3刚毛
22 5.1 3.7 1.5 0.4刚毛
24 5.1 3.3 1.7 0.5刚毛
27 5.0 3.4 1.6 0.4刚毛
32 5.4 3.4 1.5 0.4刚毛
41 5.0 3.5 1.3 0.3刚毛
42 4.5 2.3 1.3 0.3刚毛
44 5.0 3.5 1.6 0.6刚毛
45 5.1 3.8 1.9 0.4刚毛
46 4.8 3.0 1.4 0.3刚毛
my.subset <- subset(my.data, eval(subset_criteria & newcolumn == TRUE))
sub1 <- expression(Species == "setosa")

subset(iris, eval(sub1))

sub2 <- paste(sub1, '&', 'Petal.Width > 0.2')

subset(iris, eval(parse(text = sub2)))  # your case

> subset(iris, eval(parse(text = sub2)))
   Sepal.Length Sepal.Width Petal.Length Petal.Width Species
6           5.4         3.9          1.7         0.4  setosa
7           4.6         3.4          1.4         0.3  setosa
16          5.7         4.4          1.5         0.4  setosa
17          5.4         3.9          1.3         0.4  setosa
18          5.1         3.5          1.4         0.3  setosa
19          5.7         3.8          1.7         0.3  setosa
20          5.1         3.8          1.5         0.3  setosa
22          5.1         3.7          1.5         0.4  setosa
24          5.1         3.3          1.7         0.5  setosa
27          5.0         3.4          1.6         0.4  setosa
32          5.4         3.4          1.5         0.4  setosa
41          5.0         3.5          1.3         0.3  setosa
42          4.5         2.3          1.3         0.3  setosa
44          5.0         3.5          1.6         0.6  setosa
45          5.1         3.8          1.9         0.4  setosa
46          4.8         3.0          1.4         0.3  setosa