为什么我不能在一个带有非数值的data.frame列表上使用sapply?

eqzww0vc  于 2023-03-15  发布在  其他
关注(0)|答案(2)|浏览(155)

我有一个包含28个data.frame的列表,其中从第1列到第3列的每一个都有非数值,我想使用sapply对从第4列到第22列进行求和。但是我不能这样做...有没有办法忽略具有非数值的列,或者其他函数可以提供我想要的信息?

data = data.frame(x1 = letters[2:6],  
x2 = 'X',  
x3 = 5:9)

data2 = data.frame(x4 = letters[7:11],  
x5 = 'Y',  
x3 = 10:14)

teste_lista=list(data,data2)

sapply(teste_lista,sum)

return
'only defined on a data frame with all numeric-alike variables'
owfi6suc

owfi6suc1#

就像sum(iris)没有意义一样(因为其中有factor),它在这里也不起作用。

data = data.frame(x1 = letters[2:6],  
x2 = 'X',  
x3 = 5:9)

data2 = data.frame(x4 = letters[7:11],  
x5 = 'Y',  
x3 = 10:14)

teste_lista=list(data,data2)

sapply(teste_lista, function(z) sum(z[sapply(z, is.numeric)]))
# [1] 35 60
fwzugrvs

fwzugrvs2#

您也可以使用rapply与类的规范。例如integer或甚至c("integer", "numeric")如果超过1个类等

rapply(teste_lista, sum, "integer")
x3 x3 
35 60

相关问题