首先,我发誓,因为这个问题无疑已在另一页中得到解答,例如 How do I use a macro variable in R? (Similar to %LET in SAS)和Pass string as name of attached data column name但我已经阅读了它们,观看了Youtube教程,认为函数命令是我想要的,我无法让它工作。我对整个编程非常陌生,而且对于R来说只有几天,我确信由于缺乏经验或对即使从哪里开始的理解而遗漏了一些东西。
在SAS中,我会这样做
%Macro DV (var1, var2);
Proc mixed …
Model &var1 = &var2 …
Data &var1_&var2…
%mend DV;
%DV (VAS, Hyd)
%DV (SOM, Hyd)
%DV (GAS, Hyd)
我正在调用的变量(例如VAS,Hyd)是列标签,它们被调用,在混合模型中分析列,并且使用更多代码,数据集将根据文件名导出对分析的变量。 我不是想在R中做一个lmer我正在使用rmcorr包并且想要更改分析的列。 有效的原始表达式看起来像
VASCor.rmc <- rmcorr(participant = Subject, measure1 = Hyd, measure2 = VAS, dataset = mydata)
plot(VASCor.rmc,mydata, overall = T, lty=1, xlab = "Hyd", ylab = "VAS")
可以在下面找到工作数据集。所以只是在我尝试下面的第一个表达式时,认为var1和var2会插入到正确的位置,但我最终会得到一个错误&#34; object&#39; var2&#39;找不到&#34;。
Allrmcorr <- function(var1, var2){
var1.var2.rmc <- rmcorr(participant = Subject, measure1 = var2, measure2 = var1 , dataset = Results2)
}
Allrmcorr("VAS","Hyd")
Allrmcorr("VAS","Hyd")
我尝试了很多表达方式,并且可能花了很长时间试图弄清楚刚刚改写了表达时间,我不是更接近而是顽固我想知道下一个更好的方法时间。任何帮助将不胜感激。
mydata <- data.frame(
Subject = c(1,1,1,1,1,2,2,2,2,2,3,3,3,3,3),
Time = c(1:5,1:5,1:5),
VAS= runif(15),
Hyd =runif(15),
GAS= runif(15)
)
答案 0 :(得分:1)
我对rmcorr不熟悉但你的问题源于你的函数如何获取输入参数。仔细查看您的代码:
rmcorr(participant = Subject, measure1 = var2, measure2 = var1 , dataset = Results2)
将measure1
和measure
作为裸名称输入(因此,语言元素,而不是像"var1"
这样的字符串文字(在引号中)。
当你将字符串文字传递给Allrmcorr("VAS","Hyd")
的函数时,rmcorr想要裸名,它在dataset
的框架中评估它。如果你是R的新手,所有这些可能有点复杂。我建议阅读&#34;高级R&#34; Hadley Wickham如果你想深入研究这个话题(特别是关于功能和懒惰评估的章节)。
解决问题的简单方法 - 与宏变量的工作方式类似 - 将表达式构建为字符串,然后对其进行评估:
Allrmcorr <- function(var1, var2, dat){
ds <- dat
eval(parse(text = (sprintf(
"rmcorr(participant = Subject, measure1 = %s, measure2 = %s, dataset = ds)", var1, var2
))))
}
Allrmcorr("VAS", "Hyd", mydata)
当涉及到代码的性能和可调试性时,这有严重缺点;但是,由于rcmorr
的内部实现有些奇怪,我无法找到更好的问题解决方案。