【问题标题】:Showing multiple datasets using paste function?使用粘贴功能显示多个数据集?
【发布时间】:2017-10-23 22:47:22
【问题描述】:

我有一个关于在 R 中使用“粘贴”功能的问题。

设置:

我有 1000 个数据集,每个数据集的维度为 (5 X 100)。

它们分别称为 X1、X2、...、X999、X1000。 我只想查看每个数据集的第一行。 例如,X1[1,], X2[1,], ... , X999[1,], X1000[1,]。

但是我想使用循环来节省时间。 这是我最终生成错误消息的代码。

plot(X1[1,], type="s", col = "deeppink1",
  xlab = "Steps")

for(t in 2:1000){
lines(paste("X", t, sep="")[1,], type="s", col = "deeppink1")
}

错误消息说

Error in paste("final", t, sep = "")[1, ] : 
incorrect number of dimensions

我正在使用此代码来解决问题,但无法解决。请帮忙!提前谢谢!

【问题讨论】:

  • 也许你想要get
  • head(object, 1) 将显示对象的第一行。
  • 我会在循环中使用其中一个迭代函数。就是干净多了。查找applyreplicate 等。我认为处理数据的最佳方法是将其转换为array,并拥有 1 个 3d 数组与 1000 个 2d data.frames。然后你就可以调用你感兴趣的任何维度。

标签: r loops paste


【解决方案1】:

paste("X", t, sep="") 是字符串,不是变量。

您必须写 get(paste("X", t, sep="")) 才能使用您的方法,但您应该将所有数据集放在一个列表中并循环遍历它们:

for(t in 2:1000){
lines(your_list[[t]][1,], type="s", col = "deeppink1")
}

【讨论】:

  • 我认为使用get 比使用eval(parse(...)) 更可取。你知道eval 何时/如何在两者之间更受欢迎吗?
  • eval(parse(text=...)) 将在字符串不是变量名时使用
  • 当然......我一直在考虑 sql 注入(可能是无意的),以及解析的开销。我认为您将所有帧放在一个 list 中的建议是 OP 需要关注的地方......
  • 非常感谢,Moody_Mudskipper!我由衷的感谢! :)
【解决方案2】:

这是一个数组解决方案。由于你所有的 data.frames 都是相同的维度,你可以很容易地用一个数组来做到这一点。

示例数据:

Your_array<-array(1:500000,dim=c(100,5,1000)) #rows, columns , frames

显示每个data.frame的第一行

Your_array[1,,]

【讨论】:

  • 非常感谢,CCurtis!它也很有效:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-05-07
  • 2021-07-25
  • 1970-01-01
  • 1970-01-01
  • 2016-06-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多