grep使用行求和的函数在R中给出错误

安布赖斯达卡

我遇到了一个典型的问题。我一直在R中使用以下代码行:

myfiles3a <- lapply(myfiles3, function(x) {
    x$CHINA2 <- rowSums(x[,grep("China", names(x))], na.rm = T); x
})

自编写以来,它为我提供了完美应用的完美结果。但是,今天,当我只是想为另一个国家Japan地区做同样的事情时Russia该代码给出了一个错误。喜欢Error in rowSums(x[, grep("Russia", names(x))], na.rm = T) : 'x' must be an array of at least two dimensions

我完全不知道为什么会这样。我的新代码行如下。

myfiles3c <- lapply(myfiles3, function(x) {x$RUSSIA2 <- rowSums(x[,grep("Russia", names(x))], na.rm = T); x})

我无法在两行代码中找到哪里出了问题。

阿克伦

通过检查错误,问题的症结在于默认情况下?Extract使用行为drop = TRUE发生的事情是,当我们指定时,,它会从data.frame强制到vector只有一列时。考虑以下示例,其中名称中只有一个带有“ Russia”的列

df1 <- data.frame(col1 = 1:5, col2 = 6:10)
df1$RussiaCol <- 1:5
rowSums(df1[,grep("Russia", names(df1))], na.rm = TRUE)

rowSums(df1 [,grep(“俄罗斯”,名称(df1))],na.rm = TRUE)中的错误:“ x”必须是至少二维数组


现在,让我们检查一下问题

df1[,grep("Russia", names(df1))]
#[1] 1 2 3 4 5

vector由于默认行为返回a

df1[,grep("Russia", names(df1)), drop = FALSE]
#   RussiaBot
#1         1
#2         2
#3         3
#4         4
#5         5

或不使用any ,,默认情况下它将索引作为列索引

df1[grep("Russia", names(df1))]

根据 ?rowSums

x-二维或二维数组,包含数字,复数,整数或逻辑值或数字数据框。对于.colSums()等,是数字,整数或逻辑矩阵(或长度为m * n的向量)。

因此,它不需要向量


在中list,如果我们删除,,它应该可以正常工作

lapply(myfiles3, function(x) {
       x$RUSSIA2 <- rowSums(x[grep("Russia", names(x))], na.rm = T)
       x})

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章