String 如何在R中将字符串转换为变量名
我正在处理一堆currency data.csv文件。这些.csv没有标题,我正在尝试使用colnames函数添加标题String 如何在R中将字符串转换为变量名,string,r,variables,String,R,Variables,我正在处理一堆currency data.csv文件。这些.csv没有标题,我正在尝试使用colnames函数添加标题 colnames(variable_name) <- c('Date', 'Time', 'Open', 'Close', 'Volume') 但这会给我输入“AUDUSD”,我需要输入不带引号的AUDUSD 那么,我如何才能将字符串转换成我可以在这里使用的变量名呢? 或者我的方法完全错了 非常感谢 克里斯我认为你没有得到你认为你得到的东西。下面是我的测试用例: Rga
colnames(variable_name) <- c('Date', 'Time', 'Open', 'Close', 'Volume')
但这会给我输入“AUDUSD”,我需要输入不带引号的AUDUSD
那么,我如何才能将字符串转换成我可以在这里使用的变量名呢?
或者我的方法完全错了
非常感谢
克里斯我认为你没有得到你认为你得到的东西。下面是我的测试用例:
Rgames> foo[1:6]
[1] "aggfrac.R" "AJtranslate.c" "AJtranslate.R" "anaclock.R"
[5] "apollo.R" "askrm.R"
Rgames> bar<-matrix(nr=2,nc=5)
Rgames> colnames(bar)<-substr(foo,1,6)[1:5]
Rgames> bar
aggfra AJtran AJtran anaclo apollo
[1,] NA NA NA NA NA
[2,] NA NA NA NA NA
Rgames>foo[1:6]
[1] “aggfrac.R”“AJtranslate.c”“AJtranslate.R”“anaclock.R”
[5] “apollo.R”“askrm.R”
Rgames>bar列名称(bar)bar
阿波罗
[1,]NA-NA-NA
[2,]NA-NA-NA
您可以看到列名“恰到好处”。您正在查找的
get
。您的代码如下所示:
file_names <- list.files()
short_names <- substr(file_names, 1, 6)
for (i in seq_along(file_names)) {
assign(short_names[i], read.csv(file_names[i], header = FALSE))
colnames(get(short_names[i])) <- c('Date', 'Time', 'Open', 'Close', 'Volume')
}
如果您不熟悉*apply函数系列,您的整个循环可以替换为:
mapply(assign, short_names, lapply(file_names, read.csv, header = FALSE,
col.names = c('Date', 'Time', 'Open',
'Close', 'Volume'))
我建议您使用列表。这样,事情就会变得美好干净:
file_names <- list.files()
data <- lapply (file_names, read.csv, header = FALSE)
names (data) <- substr(file_names, 1, 6) # now you can access data$AUDUSD
## colnames for all data.frames
data <- lapply (data, `colnames<-`, c('Date', 'Time', 'Open', 'Close', 'Volume'))
(错误消息是反向翻译的)
不过,这是可行的:
tmp <- get (variable_name) # in your case, rather do: tmp <- read.csv (...)
colnames (tmp) <- letters [1:2]
assign (variable_name, tmp)
tmp@Joshua:复制错误。OP正在寻找get
,您将他指向assign
@flodel:很公平,这里有一个答案。我们真的需要重新回答R文档(?本例中为assign
)和R FAQ(7.21)示例中的问题吗?我认为问题在于bar
是在函数中生成的。我认为names(get(x))
不起作用;有个问题问到了,但我现在找不到。错误是赋值目标扩展到非语言对象。在任何情况下,col.names
选项都是正确的方法。太好了!非常感谢您的快速回复。正是我所需要的谢谢你给我指点这个方法!因为我是新手,像这样的答案将为我指明正确的方向。
mapply(assign, short_names, lapply(file_names, read.csv, header = FALSE,
col.names = c('Date', 'Time', 'Open',
'Close', 'Volume'))
file_names <- list.files()
data <- lapply (file_names, read.csv, header = FALSE)
names (data) <- substr(file_names, 1, 6) # now you can access data$AUDUSD
## colnames for all data.frames
data <- lapply (data, `colnames<-`, c('Date', 'Time', 'Open', 'Close', 'Volume'))
data <- lapply (file_names, read.csv, header = FALSE,
col.names = c ('Date', 'Time', 'Open', 'Close', 'Volume'))
names (data) <- substr (file_names, 1, 6) # now you can access data$AUDUSD
> colnames (get (variable_name)) <- c('Date', 'Time', 'Open', 'Close', 'Volume')
error: "target of assignment expands to non-language object")
tmp <- get (variable_name) # in your case, rather do: tmp <- read.csv (...)
colnames (tmp) <- letters [1:2]
assign (variable_name, tmp)