【问题标题】:Using For-Loop With Strings对字符串使用 For 循环
【发布时间】:2017-12-24 23:21:39
【问题描述】:

我正在学习 R 并尝试同时将其用于统计分析。 在这里,我处于工作的第一部分:我正在编写矩阵并用它们做一些简单的事情,以便以后使用这些。

punti<-c(0,1,2,4)
t1<-matrix(c(-8,36,-8,-20,51,-17,-17,-17,57,-19,-19,-19,35,-8,-19,-8,0,0,0,0,-20,-20,-20,60,
         -8,-8,-28,44,-8,-8,39,-23,-8,-19,35,-8,57,-8,-41,-8,-8,55,-8,-39,-8,-8,41,-25,
         0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),ncol=4,byrow=T)
colnames(t1) <- c("20","1","28","19")
r1<-matrix(c(12,1,19,9,20,20,11,20,20,11,20,28,0,0,0,12,19,19,20,19,28,15,28,19,11,28,1,
         33,20,28,31,1,19,17,28,19,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA),ncol=3,byrow=T)
pt1<-rbind(sort(colSums(t1)),sort(punti))
colnames(r1)<-c("Valore","Vincitore","Perdente")
r1<-as.data.frame(r1)

但我有更多矩阵 t_r_ 所以我想运行一个 for 循环,例如:

for (i in 1:150)
{
  pt[i]<-rbind(sort(colSums(t[i])),sort(punti))
  colnames(r[i])<-c("Valore","Vincitore","Perdente")
  r[i]<-as.data.frame(r[i])
}

这个行不通,因为r_t_pt_ 是字符串,但你明白了,我想复制粘贴这三个行并手动编辑[i] 150 次。有办法吗?

【问题讨论】:

  • 欢迎来到 StackOverflow!如果可能的话,请记住让您的示例可重现。也许您可以 dput 数据对象的 head()
  • 作为@Hack-R评论的后续:请阅读How to make a great reproducible example in R?
  • 谢谢。我会添加需要的。我试图让它尽可能简洁,因为这不是问题,但是是的,你是对的。
  • 可以在最后设置列名,在for循环中不需要重复150次
  • 我将拥有r1r2r3、...、r150。我想我在 for 循环中需要 colnames

标签: r string for-loop


【解决方案1】:

我个人不建议在全局环境中动态自动创建大量变量,并建议您考虑如何在没有这种方法的情况下实现目标。话虽如此,如果你觉得你真的需要动态创建所有这些变量,你可能会从assign 函数中受益。

它可以像这样工作:

for (i in 1:150)
{
assign(paste0('p',i),rbind(sort(colSums(t[i])),sort(punti))) 
}

assign 函数中的第一个参数是变量名称的公式及其创建方式;第二个参数是您希望分配给正在创建的变量的内容。

【讨论】:

  • 我稍微修改了你的建议,因为colSums(t[i]) 不起作用(Error in t[i] : object of type 'closure' is not subsettable)。我试过for (i in 1:150) { assign(paste0('p',i),rbind(sort(colSums(paste0('t',i))),sort‌​(punti))) },但它也不起作用。它报告Error in colSums(paste0("t", i)) : 'x' must be at least a two-dimensional array(翻译自意大利语,可能不是完美的翻译)
猜你喜欢
  • 1970-01-01
  • 2019-03-14
  • 2021-10-06
  • 2014-03-17
  • 1970-01-01
  • 1970-01-01
  • 2017-04-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多