gpt4 book ai didi

r - 如何将 "nothing"作为参数传递给 `[` 进行子集化?

转载 作者:行者123 更新时间:2023-12-03 15:17:03 24 4
gpt4 key购买 nike

我希望能够构建一个 do.call子集的公式,而无需识别输入数组中每个维度的实际范围。
我遇到的问题是我不知道如何模仿直接函数 x[,,1:n,] ,其他维度中没有条目意味着“抓取所有元素”。

这是一些示例代码,但失败了。据我所知,要么[do.call替换我的 NULL使用 1 列出值为索引。

x<-array(1:6,c(2,3))
dimlist<-vector('list', length(dim(x)))
shortdim<-2
dimlist[[shortdim]] <- 1: (dim(x)[shortdim] -1)
flipped <- do.call(`[`,c(list(x),dimlist))

我想我可以通过分配值 -2*max(dim(x)) 来解决一个问题。到 dimlist 的每个元素,但是糟糕。
(FWIW,我有替代功能可以通过 melt/recast 或可怕的“构建一个字符串然后 eval(parse(mystring)) 来完成所需的工作,但我想做得更好。”)

编辑:顺便说一句,我针对使用 melt & acast 的函数运行了此代码的一个版本(相当于 DWin 的 TRUE 设置)。 ;后者慢了好几倍,这并不奇怪。

最佳答案

经过一番摸索,alist似乎可以解决问题:

x <- matrix(1:6, nrow=3)
x
[,1] [,2]
[1,] 1 4
[2,] 2 5
[3,] 3 6

# 1st row
do.call(`[`, alist(x, 1, ))
[1] 1 4

# 2nd column
do.call(`[`, alist(x, , 2))
[1] 4 5 6

来自 ?alist :

‘alist’ handles its arguments as if they described function arguments. So the values are not evaluated, and tagged arguments with no value are allowed whereas ‘list’ simply ignores them. ‘alist’ is most often used in conjunction with ‘formals’.



一种动态选择提取哪个维度的方法。创建初始 alist所需长度,见 here (哈德利,使用 bquote )或 here (使用 alist )。
m <- array(1:24, c(2,3,4))
ndims <- 3
a <- rep(alist(,)[1], ndims)
for(i in seq_len(ndims))
{
slice <- a
slice[[i]] <- 1
print(do.call(`[`, c(list(m), slice)))
}

[,1] [,2] [,3] [,4]
[1,] 1 7 13 19
[2,] 3 9 15 21
[3,] 5 11 17 23

[,1] [,2] [,3] [,4]
[1,] 1 7 13 19
[2,] 2 8 14 20

[,1] [,2] [,3]
[1,] 1 3 5
[2,] 2 4 6

关于r - 如何将 "nothing"作为参数传递给 `[` 进行子集化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17750893/

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