如何使用变量的值作为R中数组的名称

时间:2015-08-03 06:11:16

标签: mysql arrays r stat

我正在使用commandArgs(TRUEvariable <- args[1]启动我的Rscript。

variable中的

是我的mysql数据库列的名称。我动态选择列并使用rohDaten <- dbGetQuery(con, sql)

进行查询

结果是一个数组。我想这样做:

rohDaten$XXX[rohDaten$XXX==NULL]<-NA其中XXX是variable

的值

如何将XXX设置为变量值?我尝试了许多类似rohDaten$get(variable)

的变体

3 个答案:

答案 0 :(得分:1)

而不是打电话

rohDaten$XXX

尝试

rohDaten[variable]

这将转换为您的变量,例如

rohDaten["columnname"]

答案 1 :(得分:1)

这应该有效:

 selected_col <- which(colnames(rohDaten) == variable)
 rohDaten[,selected_col][rohDaten[, selected_col] == NULL] <- NA

答案 2 :(得分:1)

有多种方法可以对data.frame进行子集化。 $运算符获取或设置列作为其基础类型,但只能用于文字列名,而不能用于变量中的列名。 [[运算符与$执行相同操作,但采用字符向量(长度为1)作为其参数。所以这些都是等价的:

my_data$potatoes
my_data[["potatoes"]]
variable <- potatoes; my_data[[potatoes]]

[运算符的行为有所不同,具体取决于是否有1个或2个参数。使用单个参数,它会获取或设置带有请求列的 data.frame 。这对于您正在执行的重复子集化非常重要:

my_data["potatoes"][my_data$id == 4]

这将选择my_data列作为data.frame,然后尝试使用逻辑向量再次从中选择列。除非my_data中只有一行,否则这将失败,即使这样,它也不会成为所需的结果。

使用2个参数,您可以选择行,列或两者。除非提供drop=FALSE,否则如果只请求一列,结果将是向量。

my_data[my_data$id == 4, "potatoes"]
# only elements of my_data$potatoes where my_data$id is 4
my_data[, "potatoes"]
# entirely equivalent to `my_data$potatoes` or `my_data[["potatoes"]]`

对于您的原始问题,最好的方法是:

rohDaten[rohDaten[, variable]==NULL, variable] <- NA

然而,这本身就引发了另一个问题。向量的元素不能是NULL,并且无论如何都会使用is.null来测试null。您能否在dput(rohDaten[, variable])的输出中添加问题?