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