【发布时间】:2019-11-20 18:48:08
【问题描述】:
a <- data.frame(a=c("1","2","3"),b=c("1","2","3"))
apply(a,1,function(x) {
x["a"]<- as.numeric(x["a"])
x["b"]<- as.numeric(x["b"])
return(x["a"]+x["b"])
})
我为什么会得到
x["a"] + x["b"] 中的错误:二元运算符的非数字参数
?
我不能修改 apply 循环中的值吗?
【问题讨论】:
-
return(as.numeric(x["a"])+as.numeric(x["b"]))你只需要这个。不,如果你想改变它们,你需要使用assign或<<-不推荐 -
为什么要单独更改值?你可以直接在
apply函数中做as.numeric(x)。您期望的输出是什么?如果要将值更改为数字,请使用a[] <- lapply(a, as.numeric)。如果您想按行使用sum,请在此之后执行rowSums(a)。 -
这只是一个简化的例子。我的一些列是数字的,而在我的
apply中我需要两者。然后我每次都必须做as.numeric -
@M-M 如果你把它变成答案,我会验证它
-
您的尝试不起作用的原因是因为您的
x调用中的apply是向量,并且向量只能保存一种类型的值。当您执行x["a"]<- as.numeric(x["a"])时,它会将x["a"]转换为数字,但由于x["b"]仍然是一个字符,它会再次将x["a"]强制转换为字符。x["b"]也是如此。