gpt4 book ai didi

r - 为什么 mapply 多次重复同一个列表?

转载 作者:行者123 更新时间:2023-12-01 12:46:20 25 4
gpt4 key购买 nike

请让我首先提供显示问题的合成数据集:

Do <- rep(c(0,2,4,6,8,10,15,20,30,40,45,50,55,60,65,70,80,85,90,92,94,96,98,100), each=16,times=16)
Cl <- rep(c("K", "Y","M","C"), each= 384, times=4)
In <- rep(c("A", "S"), each=3072)
Sa <- rep(c(1,2), each=1536)
Data <- rnorm(6144)
DataFrame <- cbind.data.frame(Do,Cl,In,Sa,Data); head(DataFrame)
rm(Do,Cl,In,Sa,Data)
attach(DataFrame)

接下来,我将“DataFrame”对象拆分为多个列表,以避免不可预测的回收。基本上,我将每个数据子集放在一个单独的列表中,以便可以预测循环并在我的模拟器中产生正确的输出。

DFSplit <- split(DataFrame[ , "Data"], list(Do, Cl, In, Sa))

“DFSplit”对象有 384 个列表

length(names(DFSplit))

然后我创建了函数“ids”来识别列表名称

ids <- function(Do, Cl, In, Sa){
grep( paste( "^" , Do, "\\.",
Cl, "\\.",
In,
"\\.", Sa,sep=""),
names(DFSplit), value = TRUE)}

mapply(ids, Do, Cl, In, Sa, SIMPLIFY = FALSE)

我知道每个“ids”参数的长度都是 6144。mapply 生成 384 个列表,每个列表重复 16 次。我怎样才能更改 ids 函数,以便 mapply 不会重复相同的名称 16 次。作为一个丑陋且成本高昂的解决方案,我使用了 unique;我需要一个更好的根本解决方案。

unique(mapply(ids, Do, Cl, In, Sa, SIMPLIFY = FALSE))

我还创建了一个函数来操作“DFSplit”列表。它与以前的功能有相同的问题。问题是,它接受先前的函数作为输入。

dG <- function(Do,Cl, In, Sa){
dg <- 100*
(1-10^-( DFSplit[[ids(Do, Cl, In, Sa)]] - DFSplit[[ids(0, Cl, In, Sa)]])) /
(1-10^-( DFSplit[[ids(100, Cl, In, Sa)]] - DFSplit[[ids(0, Cl, In, Sa)]])) - Do
dg}

mapply(dG, Do, Cl, In, Sa, SIMPLIFY = FALSE)

我正在尝试做的是在 384 个列表中的每个列表中应用 dG 函数,如果我可以说是不成功的话。我承认 dG 功能也需要修改,但我不知道如何修改。我希望 dG 函数的输入是 384 个列表的名称,每个列表包含 16 个数字。我希望输出为应用了 dG 的 384 列表。

请随时提出不同的解决方案。重要的是我需要将“dG”函数应用于数据集。

最佳答案

请仔细看看您给予的内容 mapply每个对象的长度为 6144

  > length(Do)
[1] 6144
> length(Cl)
[1] 6144
> length(In)
[1] 6144
> length(Sa)
[1] 6144
>

您正在给 mapply 6144 元组并要求它迭代每个元组。
它返回一个包含 6144 元素的列表。

这正是你告诉它要做的


此外,只需复制并粘贴您的代码即可生成一个 6144 长的列表,每个元素包含 16 个元素。

  .
.
[[6141]]
[1] 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 1.421085e-14
[12] 0.000000e+00 0.000000e+00 0.000000e+00 -1.421085e-14 0.000000e+00

[[6142]]
[1] 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 1.421085e-14
[12] 0.000000e+00 0.000000e+00 0.000000e+00 -1.421085e-14 0.000000e+00

[[6143]]
[1] 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 1.421085e-14
[12] 0.000000e+00 0.000000e+00 0.000000e+00 -1.421085e-14 0.000000e+00

[[6144]]
[1] 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 1.421085e-14
[12] 0.000000e+00 0.000000e+00 0.000000e+00 -1.421085e-14 0.000000e+00

因此,不是您描述的 1 个元素的 6144。

您收到了两条非常好的建议,一条来自@Arun,一条来自@Paul Hiemstra。

也许您可以尝试描述您要完成的目标,这里的人可以更好地帮助您。另外,请不要忘记回顾您之前的问题并投赞成票,并感谢那些为您提供有用答案的人。

关于r - 为什么 mapply 多次重复同一个列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15449612/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com