在R中,如何将参数作为字符串传递给诸如plotXtabs2之类的函数?

在R中,如何将参数作为字符串传递给诸如plotXtabs2之类的函数?,r,function,eval,R,Function,Eval,是一个函数,用于绘制分类变量之间的交叉表比例,其中至少需要3个参数 PlotXTabs2 数据 x,, y 此数据框中的数据框、x和y列名 我想在一个循环中调用它,其中列名x,y是来自dataframe colnames的字符串,类似于 varscat=colnamesdf for(i in 1:(length(varscat)-1)) { for(j in (i+1):length(varscat)) { tmp <- df[,c(myvars[varscat[i]]

是一个函数,用于绘制分类变量之间的交叉表比例,其中至少需要3个参数

PlotXTabs2 数据 x,, y

此数据框中的数据框、x和y列名

我想在一个循环中调用它,其中列名x,y是来自dataframe colnames的字符串,类似于

varscat=colnamesdf

for(i in 1:(length(varscat)-1)) 
{
  for(j in (i+1):length(varscat))
  {
     tmp <- df[,c(myvars[varscat[i]], myvars[varscat[j]])]

     # ...

     PlotXTabs2( df, x=myvars[varscat[i]], y=myvars[varscat[j]] ) 
 }
}
我一直在尝试使用eval、do.call进行示例,但没有成功,大多数示例都与预期用途是编写函数以接受参数作为字符串的情况有关

我怎样才能达到这个效果呢?

你可以使用!!来自rlang:

图书馆CGP功能 >已注册的S3方法被“lme4”覆盖: >方法自 >厨师、距离、影响、默莫德汽车 >默莫德汽车公司 >dfbeta.impact.merMod汽车 >dfbetas.impact.merMod汽车 图书馆GGPLOT2 out您可以使用!!来自rlang:

图书馆CGP功能 >已注册的S3方法被“lme4”覆盖: >方法自 >厨师、距离、影响、默莫德汽车 >默莫德汽车公司 >dfbeta.impact.merMod汽车 >dfbetas.impact.merMod汽车 图书馆GGPLOT2
out作为函数的作者,我觉得有义务展示我通常如何使用它,并避免引用的麻烦。渐晕图和帮助文件显示了更复杂的示例,在这些示例中,您可以使用pmap构建标题等

图书馆CGP功能 您可以按列号生成 交叉向量,9,c2,10:11 或列名 cross2_var_矢量TCARS、am、ccyl、齿轮、carb 手工构建向量
x2作为函数作者,我觉得有义务展示我通常如何使用它,并避免引用的麻烦。渐晕图和帮助文件显示了更复杂的示例,在这些示例中,您可以使用pmap构建标题等

图书馆CGP功能 您可以按列号生成 交叉向量,9,c2,10:11 或列名 cross2_var_矢量TCARS、am、ccyl、齿轮、carb 手工构建向量
x2好的,它是有效的,但为什么我尝试将相同的应用于ggplot时,它不起作用?>>vx=mpg vy=disp ggplotmtcars,aesx=!!vx,y=!!vy+geom_barstat=identity?`!!`我将给你一些例子来说明如何通过这个测试-是的,它有点复杂,但在这种情况下它是如何工作的:ggplotmtcars,aesx=!!symvx,y=!!symvy+geom_barstat=我的答案中的标识,替换PlotXTabs2 mpg!!z[1]!!z[2]带PlotXTabs2mpg!!symz[1]!!symz[2]也会起作用;作为一个概括,这可能会更安全。很高兴您发现这个包对@jcarlos有帮助。您可能还想看看使用pmap交叉变量以及交叉2_var_vectors辅助函数的最后一个渐晕图。好的,它可以工作,但为什么我尝试将相同的应用于ggplot却不能?>>vx=mpg vy=disp ggplotmtcars,aesx=!!vx,y=!!vy+geom_barstat=identity?`!!`我将给你一些例子来说明如何通过这个测试-是的,它有点复杂,但在这种情况下它是如何工作的:ggplotmtcars,aesx=!!symvx,y=!!symvy+geom_barstat=我的答案中的标识,替换PlotXTabs2 mpg!!z[1]!!z[2]带PlotXTabs2mpg!!symz[1]!!symz[2]也会起作用;作为一个概括,这可能会更安全。很高兴您发现这个包对@jcarlos有帮助。您可能还想查看使用pmap交叉变量的最后一个渐晕图,以及cross2_var_vectors辅助函数。我想知道您是否可以将更大的默认B参数传递给sjstats::crosstable_statistics使用的fisher.test,或者允许用户选择,或者允许选择方法phi chiq.test和auto,因为当sjstats::crosstable_statistics选择fisher时,B=2000通常会给出非常可变的p值。这将使结果更具再现性。例如,在上面的示例图中,p很容易在.005和.015之间变化。当B=1E6时,它在.0090和.0092之间变化很大,因此仍然非常接近chisq计算的.0091。我来看看。请帮我一个忙,把它放在这里,这样我就不会忘记,我很少再关注p值了。我想知道您是否可以将一个更大的默认B参数传递给sjstats::crosstable_statistics使用的fisher.test,或者允许用户选择它-或者允许选择方法phi chiq.test和auto,因为当sjstats::crosstable_statistics选择fisher时,B=2000经常给出非常可变的p值。这将使结果更具再现性。例如,在上面的示例图中,p很容易在.005和.015之间变化。当B=1E6时,它在.0090和.0092之间变化很大,因此仍然非常接近chisq计算的.0091。我来看看。你能帮我一个忙,把它放在这里吗,所以我不会忘记,我很少再关注p值了。