gpt4 book ai didi

解决 R 函数中的 nrow/length(list) 错误

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

我有一个功能:

extract_tmp <- function(x,y)
{
nr <- nrow(x$y)
ind <- seq(6, nr, by = 12)
out <- lapply(Map(seq, ind[ seq_along(ind) %% 2 == 1 ], ind[ seq_along(ind) %% 2 == 0 ]),
function(i) x$y[i])
}

当我打电话时:
extract_tmp(JAN , tmp.2007.jan)

它返回:
Error in seq.default(6, nr, by = 12) : 'to' must be of length 1

当我切换 nrow()length()它返回:
Error in seq.default(6, nr, by = 12) : wrong sign in 'by' argument 

我已经阅读此站点并进行了几个小时的故障排除,但无法解决这些问题。附加信息:
length(JAN$tmp.2007.jan)
# 744
nrow(JAN$tmp.2007.jan)
# NULL
mode(JAN)
# "list"
mode(JAN$tmp.2007.jan)
# "numeric"

谢谢你的帮助。

最佳答案

extract_tmp <- function(x, y) {
nr <- nrow(x)
ind <- seq(6, nr, by = 12)
out <- lapply(Map(seq, ind[ seq_along(ind) %% 2 == 1 ], ind[ seq_along(ind) %% 2 == 0 ]),
function(i) x[[y]][i])
out
}
extract_tmp(mtcars, "cyl")
# [[1]]
# [1] 6 8 4 4 6 6 8 8 8 8 8 8 4
# [[2]]
# [1] 6 8 4 4 4 8 8 8 8 4 4 4 4

固定的东西:
  • 一般来说,您不能传递未引用的列名。我建议您为第二个参数传递一个字符串并使用 x[[y]]而不是 x$y . (可以使用 substitute 和其他 NSE(非标准评估)方法,但在 R 开始时,我建议您继续使用标准评估。
  • nrow作用于帧,而不是向量,所以 nrow(x)length(x[[y]]) .
  • 本身不是问题,但它可能看起来是一个问题。您没有明确返回 out从你的功能。在 R 中,通常在代码块中返回最后一个表达式。当最后一个表达式是赋值( <- )时,它的值也被不可见地返回(这就是 a <- b <- 2 起作用的原因:表达式 b <- 2 不可见地返回所分配的值,然后级联到 a <- 2

    在这种情况下,不添加显式 out正如我在上面所做的那样,它仍然会返回您需要的结果,但它似乎什么都不做:extract_tmp(mtcars, "cyl")似乎什么也不返回,但是如果你将结果分配给一个变量并查看它,或者如果你调用 (extract_tmp(mtcars, "cyl"))而是(周围的括号),然后您将看到输出。

    一般来说,我强烈建议您明确说明您的返回变量。一个原因是声明性代码。另一个原因是有时最后一个表达式不适用于所有需要的值。例如,考虑这个 block :

    x <- 1:10
    x[3] <- 99

    在这种情况下,最后一个赋值的值为 99,而不是 x 的内容。 ,因此,如果您打算将返回值作为整个向量,那么您将错过。
  • 关于解决 R 函数中的 nrow/length(list) 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62438979/

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