R在整个r脚本中使用字符串作为变量名

时间:2017-11-07 16:45:45

标签: r string variables

我有一个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")

3 个答案:

答案 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'

会做的。