简单的R for循环未执行

时间:2018-12-13 01:40:27

标签: r loops

这应该很简单,它必须是语法,但是我到处搜索了以前发布的解决方案。只是尝试使用循环来减少表中变量名的大小写。

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)。

1 个答案:

答案 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之类的功能。不要听他们的话。