这应该很简单,它必须是语法,但是我到处搜索了以前发布的解决方案。只是尝试使用循环来减少表中变量名的大小写。
colnames命令在没有“ for”的情况下有效:
colnames(case) <- tolower(colnames(case))
for循环不使用名称:
tablen<-c("account","case")
for(x in tablen) {
print(x)
}
但结合起来
tablen<-c("account","case")
for(x in tablen) {
colnames(x) <- tolower(colnames(x))
}
返回:
Error in `colnames<-`(`*tmp*`, value = tolower(colnames(x))) :
attempt to set 'colnames' on an object with less than two dimensions
任何帮助表示赞赏!
到目前为止,感谢您的答复,但我正在寻求的解决方案是如何使 命令:
colnames(case) <- tolower(colnames(case))
使用for循环工作。在此示例中,文本“ case”是指data.frame。上面的命令不在for循环中时,将大小写data.frame的变量名更改为小写。建议创建一个新的case变量名列表,并使用for循环将其降低,但是并没有达到直接通过引用data.frame(而不是表中的变量名)使上述命令生效的预期目标)。似乎colnames命令不会接受for中的i之类的运算符(表中的i)。
答案 0 :(得分:3)
这里的关键是case
是一个引用data.frame(或矩阵)的符号。您的错误在于认为字符对象"case"
也是指case
表示的data.frame / matrix。不会。
例如,
x <- 2
将数字2分配给对象x
。但是"x"
只是字符字母x,与我刚刚定义的对象没有任何关系。可能要做的就是将对象放在列表中:
my_list <- list(account,case) # Note the lack of double quotes!
然后遍历my_list
:
for (i in seq_along(my_list)){
colnames(my_list[[i]]) <- tolower(colnames(my_list[[i]]))
}
一个具体示例:
l <- list(mtcars,mtcars)
head(l[[1]])
for (i in seq_along(l)){
colnames(l[[i]]) <- toupper(colnames(l[[i]]))
}
head(l[[1]])
head(l[[2]])
人们将不可避免地出现在评论和答案中,提示您“作弊”并使用诸如get
之类的功能。不要听他们的话。