我遇到了一个典型的问题。我一直在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] 删除。
我来说两句