【发布时间】:2014-12-13 09:45:10
【问题描述】:
我正在尝试生成一个函数来在具有相同命名约定并使用相同逻辑的数据框上创建一堆列。不幸的是,我在创建变量时遇到了一些奇怪的行为,我希望其他人可以解释这里发生了什么。
df <- data.frame(var1 = c(1,2,3), var2 = c(3,4,5), var3 = c("foo", "bar", "baz"))
DoesNotWork <- function(df, varname){
df[paste(varname, "_square", sep = "")] <- df[varname]^2
return(df)
}
dfBad <- DoesNotWork(df, "var1")
dfBad
var1 var2 var3 var1
1 1 3 foo 1
2 2 4 bar 4
3 3 5 baz 9
dfBad 这里有两个变量var1,而不是我希望的一个变量var1 和一个变量var1_squared。
下面的函数通过将原始变量的所有值分配给新变量名来解决这个问题,然后只对新变量执行相同的操作,但这有点令人讨厌,我不确定如果我需要使用来自多个变量的逻辑会发生什么。
Works <- function(df, varname){
df[paste(varname, "_square", sep = "")] <- df[varname]
df[paste(varname, "_square", sep = "")] <- df[paste(varname, "_square", sep = "")]^2
return(df)
}
dfGood <- Works(df, "var1")
dfGood
var1 var2 var3 var1_square
1 1 3 foo 1
2 2 4 bar 4
3 3 5 baz 9
这里的任何指导都将不胜感激,特别是如果有更好的方法可以在变量名的字符串和对列对象的引用之间进行切换。
【问题讨论】:
标签: r string function variables