我正在使用commandArgs(TRUE
和variable <- args[1]
启动我的Rscript。
variable
中的是我的mysql数据库列的名称。我动态选择列并使用rohDaten <- dbGetQuery(con, sql)
结果是一个数组。我想这样做:
rohDaten$XXX[rohDaten$XXX==NULL]<-NA
其中XXX是variable
如何将XXX设置为变量值?我尝试了许多类似rohDaten$get(variable)
答案 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])
的输出中添加问题?