“递归索引在级别 4 失败”R 代码
Posted
技术标签:
【中文标题】“递归索引在级别 4 失败”R 代码【英文标题】:"Recursive indexing failed at level 4" R code 【发布时间】:2019-03-12 00:37:49 【问题描述】:我有一个名为 PDay 的列表,其中包含 3 个子列表。每个子列表包含 6 个数据帧。 为了打印每个数据帧( PDay[[1]][[1]], PDay[[1]][[2]] ,...),我编写了以下代码:
A<-seq_len(3)
B<-seq_len(6)
F1<-function(x,y)
PDay[[y]][[x]]
c(outer(B,A,F1))
这是我的错误: "递归索引在第 4 级失败"
我的代码有什么问题?怎么改?
谢谢
编辑:请不要嵌套循环。只是 external() 函数。
【问题讨论】:
【参考方案1】:为什么不只是:
print(PDay)
或者,如果目标是使用不同的功能,您可以双重申请:
lapply(PDay, function(x) lapply(x, print))
【讨论】:
【参考方案2】:为了使outer
成功,需要有一个至少在 x 中矢量化的函数。 "[[" 函数不能用于传递矢量化结果。此方法已在您指定的较小示例上进行了测试,但应该足够通用:
F1<-function(x,y)
print( PDay[[y]][[x]] )
VF1 <- Vectorize(F1)
outer(B,A,VF1)
当您运行它时,您会注意到您首先会看到数据帧的打印结果,然后是列表矩阵。如果您希望抑制该矩阵结果,您可以将其分配给一个名称,作为对外部调用的一部分(使用 VF1 函数仅用于打印副作用),然后是 rm(the_name)
。
junk_name=outer(B,A,VF1)
rm(junk_name)
在获得打印副作用的同时抑制outer
的输出的另一种方法是使用invisible
函数:
invisible( outer(B,A,VF1) )
【讨论】:
你能告诉我你想如何用代码来抑制矩阵吗? 谢谢,但是我尝试使用 invisible 但它给了我错误: dim(robj) 好像还有一个矩阵。为什么会这样? 发帖dput(PDay)
以上是关于“递归索引在级别 4 失败”R 代码的主要内容,如果未能解决你的问题,请参考以下文章