R对非数值参数应用中断
我对R对非数值参数应用中断,r,apply,R,Apply,我对apply函数缺乏很好的理解,该函数在数据帧上循环时可能会导致错误消息,其中一列是字符 我通过将数据帧的行传递给我的用户定义函数(UDF)来使用apply 当数据帧的列都是数值时,所有这些都可以正常工作 当我将其中一列更改为character时,若我逐个传递数据帧的行,那个么我的UDF仍然有效 但是只要我使用应用就会出现以下错误: 二进制运算符的非数值参数 下面是说明问题的代码示例: 定义自定义项: UDF <- function(x){return(x[1] + x[2])} 如果
apply
函数缺乏很好的理解,该函数在数据帧上循环时可能会导致错误消息,其中一列是字符
我通过将数据帧的行传递给我的用户定义函数(UDF)来使用apply
当数据帧的列都是数值时,所有这些都可以正常工作
当我将其中一列更改为character时,若我逐个传递数据帧的行,那个么我的UDF仍然有效
但是只要我使用应用
就会出现以下错误:
二进制运算符的非数值参数
下面是说明问题的代码示例:
定义自定义项:
UDF <- function(x){return(x[1] + x[2])}
如果我通过x$col3将col3更改为字符,则函数apply
可用于矩阵(和数组)。如果对dara帧使用apply
,它将转换为最通用类型的矩阵。字符类型比数字类型更通用。因此,如果数据帧中至少存在一个字符列,则所有值都将成为字符串(对于该字符串,UDF
函数不起作用)
要避免这种行为,您可以改为使用by
:
by(x, seq(nrow(x)), UDF)
# [1] 4
# ---------------------------------------------------------------------------------
# [1] 6
另一个选项是包dplyr
中的rowwise
:
library(dplyr)
x %>% rowwise %>% UDF
# col1
# 1 4
# 2 6
函数apply
用于矩阵(和数组)。如果对dara帧使用apply
,它将转换为最通用类型的矩阵。字符类型比数字类型更通用。因此,如果数据帧中至少存在一个字符列,则所有值都将成为字符串(对于该字符串,UDF
函数不起作用)
要避免这种行为,您可以改为使用by
:
by(x, seq(nrow(x)), UDF)
# [1] 4
# ---------------------------------------------------------------------------------
# [1] 6
另一个选项是包dplyr
中的rowwise
:
library(dplyr)
x %>% rowwise %>% UDF
# col1
# 1 4
# 2 6
by(x, seq(nrow(x)), UDF)
# [1] 4
# ---------------------------------------------------------------------------------
# [1] 6
library(dplyr)
x %>% rowwise %>% UDF
# col1
# 1 4
# 2 6