我有一个R脚本,它可以计算几个线性模型,还可以计算ggplots等。现在我想用更改变量来运行它。
取决于我的规格
df$targetX
应解释为:
df$target_37
和
lm(targetX ~ kelvin, df)
应该像我调用的那样计算线性模型:
lm(target_37 ~ kelvin, df)
我试用formula()
,paste()
,parse()
和eval()
但没有成功。
有没有办法可以指定targetX来实现这一目标而无需触及分析脚本?
targetX <- smartCommandIdontKnow("target_37")
答案 0 :(得分:0)
如何在基础R中解决这个问题,而tidyverse(ggplot2)通常是不同的。在不知道您要做什么的情况下,一个选项是使用which(colnames(df)==targetX)
查找列号,并将函数中的列重命名为函数使用的通用列。例如(长时间帮助理解):
smartCommandIdontKnow = function(colN){
x=df
id = which(colnames(x)==colN)
colnames(x)[id] = "col_X"
lm(col_X ~ kelvin, x)
}
答案 1 :(得分:0)
这是一个使用for循环的最小建议。我认为你可能会陷入引用变量的神奇$-notation
方式。请注意,df[["variable"]]
相当于df$variable
。
df <- data.frame('target_37'= 1:5,
'target_38' = 2*(1:5),
'target_39'= 3*(1:5),
'kelvin'= 4*(1:5))
# Independent vars
var_list = c("target_37", "target_38", "target_39")
for(var in var_list){
print(df[[var]]) # Do whatever it was you wanted with your df
lm(df[[var]] ~ kelvin, df)
}
我的答案是一种猜测,因为你并没有提供足够的代码来确切知道你为什么会精神错乱。尽管我的回答是使用for-loop,但我也强烈强烈建议您在未来的脚本中采用MrFlick的建议。 R的功能方法如果非常强大和for循环可以变得非常笨拙/不可读,非常快。
答案 2 :(得分:-2)
你正在将targetX变成一个变量,是的,但你并没有将它作为数据表的一部分。你必须加入到那张桌子才能打电话来工作。
之类的东西df$target_37 <- 'target_37'
会做的。