运行以下代码时出现错误
TransPSnoNA <- mapply(noNA,x = TransPerSend1[,2],y = TransPerSend1[,3])
noNA是一个将NA替换为0的函数,如果我在一列上使用sapply,则该函数可用。
noNA <- function(x) if(is.na(x)==TRUE){x=0}else{x}
示例数据集如下所示:
Col1 Col2 Col3
1 2 3
2 NA 3
2 4 NA
我收到错误:
Error in (function (x) : unused argument (y = dots[[2]][[1]])
我尝试设置SIMPLIFY = FALSE
,但这也不起作用。有什么帮助吗?
据我了解,mapply允许我一次在数据框中的两列使用函数(在我的情况下为noNA)。在此先感谢您的帮助。
答案 0 :(得分:0)
这似乎有效
TransPerSend1[2:3] <- t(mapply(function(x,y) replace(c(x,y),
is.na(c(x,y)), 0), TransPerSend1[,2], TransPerSend1[,3]))
但是,我认为这可以更好地解决
TransPerSend1[,2:3][is.na(TransPerSend1[,2:3])] <- 0
甚至
TransPerSend1[2:3] <- lapply(TransPerSend1[,2:3],
function(x) replace(x, is.na(x),0))
关于错误消息,noNA
函数只有一个参数。假设,如果是:
noNA <- function(x,...) if(is.na(x)==TRUE){x=0}else{x}
它仍会评估x
mapply(noNA,x = TransPerSend1[,2],y = TransPerSend1[,3])
#[1] 2 0 4
t
的原因是因为,我使用的代码给出了一个包含3列和2行的输出,应该转换为按预期获得2列。
# [,1] [,2] [,3]
#[1,] 2 0 4
#[2,] 3 3 0
TransPerSend1 <- structure(list(Col1 = c(1L, 2L, 2L), Col2 = c(2L, NA, 4L),
Col3 = c(3L, 3L, NA)), .Names = c("Col1", "Col2", "Col3"), class = "data.frame",
row.names = c(NA, -3L))