R评估"粘贴"作为品格而非价值

时间:2017-04-19 05:33:43

标签: r

我有与变量相关的权重:

WeightVar1 <- .75
WeightVar2 <- .8
WeightVar3 <- .10

我想编写一个完成以下任务的函数:

Var1_New <- Var1 * WeightVar1
Var2_New <- Var2 * WeightVar2
Var3_New <- Var3 * WeightVar3

它看起来像这样

for (i in 1:3)
{
Var_New <- paste("Var",i,sep="") * paste("WeightVar",i,sep="")
Var_New <- paste("Var",i,"_New",sep="")
}

问题是R评估粘贴(&#34; WeightVar1&#34;,i,sep =&#34;&#34;)为&#34; WeightVar1&#34;而不是数值,.75。

我正在评估具有不同数量的变量和权重的数据集,因此不是单独评估它们,而是具有可以迭代到第i个的函数,这将节省时间并保持代码清洁。

3 个答案:

答案 0 :(得分:0)

我会以不同的方式做事。首先,我要创建一个包含VarWeightVar列的数据框:

df1 <- data.frame(Var = c(10, 20, 30), 
                  WeightVar = c(0.75, 0.8, 0.1)
                 )

然后我写了这个函数:

make_new_var <- function(var, weightvar) {
    var * weightvar
}

然后我将数据框的列传递给函数:

df1$NewVar <- make_new_var(df1$Var, df1$WeightVar)
df1

  Var WeightVar NewVar
   10      0.75    7.5
   20      0.80   16.0
   30      0.10    3.0

答案 1 :(得分:0)

由于许多R运算符(包括*)被矢量化,你可以创建一个带变量的向量和一个带权重的向量,然后将它们相乘:

vars <- c(1, 2, 3)
weights <- c(10, 20, 30)
vw <- vars * weights

# > vw
# [1] 10 40 90

答案 2 :(得分:0)

如上所述,通过在我的paste命令中添加get(),它将变量视为值而不是字符块。感谢@AdamQuek的评论。

WeightVar1 <- .75
WeightVar2 <- .8
WeightVar3 <- .10

df<- data.frame(Var1 = 20
       ,Var2 = 30
       ,Var4 = 40)

for (i in 1:3)
{
df$Var_New <- df[i] * get(paste("WeightVar",i,sep=""))
names(df)[names(df) == "Var_New"] <- paste("Var",i,"_New",sep="")
}

当我不知道前面的变量/权重的数量时,这允许很多灵活。

谢谢!