【问题标题】:Simple R for loop not executing简单的 R for 循环未执行
【发布时间】:2018-12-13 01:40:27
【问题描述】:

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

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 循环中时会将 case data.frame 的变量名称更改为小写。创建 case 变量名称的新列表并使用 for 循环降低它们的建议有效,但没有达到通过直接引用 data.frame(而不是表中的变量名称)使上述命令工作的预期目标)。似乎 colnames 命令不会接受像 i in for (i in table) 这样的运算符。

【问题讨论】:

  • 虽然我对 R 一无所知,但我注意到在第二个示例中您有 tablen&lt;-c("account","case"),但在第三个(损坏的)示例中您有 tablen&lt;("account","case")(没有 -c)。这可能是问题吗?
  • @3ocene 这不是问题。
  • 感谢 3ocene,但在我的示例中这是一个错字,但不是问题,谢谢!!

标签: r loops


【解决方案1】:

这里的关键是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]])

人们将不可避免地出现在 cmets 和答案中,暗示您“作弊”并使用 get 之类的功能。不要听他们的。

【讨论】:

  • @DWhite 实际上,我的示例确实有效(我将用一个示例更新我的答案,您可以复制和粘贴并自己验证)。如果此技术对您不起作用,则意味着您尚未共享的数据/代码中存在其他问题,这会导致问题。
  • 对不起,Joran,我正在尝试降低两个 data.frames “case”和“account”中所有变量名称的大小写。您的代码正在创建“case”和“account”的变量名称列表,并降低该列表中名称的大小写 tablen
  • @DWhite 对!这里的部分要点是,要在循环中对相关对象组进行操作,正确的做法是首先将它们保存在列表中。您对对象具有相同的访问权限,而且您可以遍历它们。将它们作为单独的对象是一个非常常见的初学者错误。
  • @DWhite 如果您想要更大的灵活性,请将其设为命名列表:tablen
  • 我希望只循环命令 colnames(case)
猜你喜欢
  • 1970-01-01
  • 2013-02-12
  • 2014-10-07
  • 2021-04-23
  • 1970-01-01
  • 2021-04-13
  • 1970-01-01
  • 2023-03-09
相关资源
最近更新 更多