R f \ Functions /宏和从数据生成调用

时间:2014-07-05 01:55:11

标签: r macros sas

所以我是熟练的SAS用户,但对R来说很新。我发现自己很沮丧,因为我无法弄清楚如何在R中做一些在SAS中非常简单的事情,所以我认为很简单R.我认为我在某个非常基础的层面上缺少关于R工作方式的东西。

在R中,我正在使用空气质量数据集并尝试按每个变量对每个变量进行散点图。

在SAS中我会做类似以下的事情:

proc contents data=airquality noprint out=contents;
run;

proc sql noprint;
  create table all_combs as select A.name,B.name as name2 from contents A, contents B where a.name ne B.name;
  select cats('%scatter(',name,',',name2,')') into :scatter separated by ' ' from all_combs;
quit;

%macro scatter(x,y);
  proc sqplot data=airquality;
  scatter x=&x. y=&y.;
  run;
%mend;

&scatter.;

基本过程是从数据生成变量列表并生成笛卡尔积。结果被抛入一系列宏调用中,这些宏调用存储在宏变量中,在您定义宏之后调用该宏变量。

我假设在R中执行此操作的方法是生成一个函数来执行此操作,但我在那里失败了。我希望下面的内容能够正常运行,但我并不理解为什么。

plotfun=function(v1,v2){plotfun=plot(airquality$v1,airquality$v2)}
plotfun(Wind,Temp)

即使我做了那部分,我也不知道如何自动生成函数的调用。

有什么建议吗?

1 个答案:

答案 0 :(得分:2)

这可能会做你所希望的:

plotfun=function(df, v1,v2){ plot(df[[v1]],df[[v2]]) }
plotfun(airquality, 'Wind','Temp')

请注意,您的代码会导致R解释器查找名为' Wind'的变量,然后将其传递给v1,但即使它找到了这样的变量也会失败,因为{在您的情况下,{1}}不会评估其第二个参数$