R语言如何修复:object of type closure is not subsettable
在这篇文章中,我们将讨论如何在R编程语言中修复”‘closure’类型的对象不是子集表 “的错误。
在R语言中,人们可能面临的错误是。
object of type 'closure' is not subsettable
当我们试图对一个函数进行子集时,R编译器会产生这样一个错误。在R语言中,我们可以对列表、向量等进行子集,但对具有 “闭合 “类型的函数则不能进行子集。
什么时候可能会发生这种错误
考虑到我们在R中的一个函数将一个向量的每个元素作为输入并与10相加。
# Define a function
Add <- function(x) {
x <- x + 10
return(x)
}
让我们添加一些可以调用这个函数的菜单驱动代码。
# Define a function
Add <- function(vect) {
vect <- vect + 10
return(vect)
}
# Define a vector
vect <- c(8, 9, 12, 14, 20)
# Calling Add function
Add(vect)
输出
正如你在输出中看到的,向量的每个元素都被加上了10。现在,假设我们尝试对这个函数进行子集。
# Define a function
Add <- function(vect) {
vect <- vect + 10
return(vect)
}
# Define a vector
vect <- c(8, 9, 12, 14, 20)
# Try to access the second element
# of the function
Add[2]
输出
编译器会产生这样的错误,因为在R语言中不允许对具有闭合类型的对象进行子集。为了确认函数是闭合类型的,我们可以使用typeof()函数,其语法如下。
语法: typeof(x)
参数
x:它代表指定的数据
# Define a function
Add <- function(vect) {
vect <- vect + 10
return(vect)
}
# Define a vector
vect <- c(8, 9, 12, 14, 20)
# Print the type
typeof(Add)
输出
R中的任何函数都是封闭类型的。例如,让我们先试着对一个median()的内置函数进行子集。
语法: median(x)
参数: x:一个向量
返回类型: 返回向量元素的中位数
# Try to access the first element
median[1]
输出 。
现在我们将对range()的内置函数进行子集。
语法: range(x)
参数: x:一个向量
返回类型: 返回一个范围
# Try to access the first element
range[1]
输出 。
如何修复这个错误
我们可以通过不对函数进行子集来轻松解决这个错误。例如,假设我们想对向量 vect 的第二个元素使用Add()函数。
# Define a function
Add <- function(vect) {
vect <- vect + 10
return(vect)
}
# Define a vector
vect <- c(8, 9, 12, 14, 20)
# Try to access the second element
# of the function
Add(vect[2])
输出
这次程序编译成功了,因为这里我们是对向量而不是对函数进行子集。另外,请注意,我们可以在整个向量上应用Add()。
# Define a function
Add <- function(vect) {
vect <- vect + 10
return(vect)
}
# Define a vector
vect <- c(8, 9, 12, 14, 20)
# Calling Add function
Add(vect)
输出