gpt4 book ai didi

r - 为什么在将子集应用于 R 中的数据框列表时找不到函数传递的参数

转载 作者:行者123 更新时间:2023-12-04 10:10:21 25 4
gpt4 key购买 nike

我在 sapply subset 到 R 说“Error in eval(expr, envir, enclos) : 找不到对象 'thresh'”。我想知道为什么会这样。

test<-list()
test[[1]]<-as.data.frame(matrix(rnorm(50*5,10,100),50,5))
test[[2]]<-as.data.frame(matrix(rnorm(50*5,10,100),50,5))


findmax<-function(test,thresh){
print(thresh)
max(unlist(sapply(test,subset,V1>thresh,select=c("V1"))))
}

findmax(test,thresh=10)

最佳答案

请注意 ?subset 中的警告:

Warning:

This is a convenience function intended for use interactively.
For programming it is better to use the standard subsetting
functions like ‘[’, and in particular the non-standard evaluation
of argument ‘subset’ can have unanticipated consequences.

subset 有一些关于在其中查找对象和变量的奇怪的评估规则,这取决于调用环境等。当用户在顶层交互式调用时,这些规则工作正常,但通常如您所见,包裹在函数内部时失败。

这是使用标准子集重写函数的一种方法:

findmax <- function(test, thresh, want) {
foo <- function(x, thresh, want) {
take <- x[, want] > thresh
x[take, want]
}
max(unlist(sapply(test, foo, thresh = thresh, want = want)))
}
findmax(test, thresh = 10, want = "V1")

您的测试数据给出:

R> findmax(test, thresh = 10, want = "V1")
[1] 230.9756

关于r - 为什么在将子集应用于 R 中的数据框列表时找不到函数传递的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12244534/

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