问题
是否有一个函数或方法让rowSums
只能在一列上工作?
示例数据
col1 <- c(1,2,3)
col2 <- c(1,2,3)
df <- data.frame(col1, col2)
我可以使用rowSums
对两行或多行定义的行中的每个值求和:
colsToAdd <- c("col1", "col2")
rowSums(df[,colsToAdd])
[1] 2 4 6
但是,仅在传递列时
会失败colsToAdd <- c("col1")
rowSums(df[,colsToAdd])
Error in rowSums(df[, colsToAdd]) :
'x' must be an array of at least two dimensions
在查看rowSums()
函数时有意义:
> rowSums
function (x, na.rm = FALSE, dims = 1L)
{
if (is.data.frame(x))
x <- as.matrix(x)
if (!is.array(x) || length(dn <- dim(x)) < 2L)
## This line 'stops' the function if only one column is passed
其他信息
用户将在Shiny应用程序中选择列并存储在变量中。然后将此变量传递给rowSums
。用户可以选择一列或多列。
我可以构造一个ifelse
语句来检查变量的长度,但是想知道是否有更好/更优雅/单行的解决方案,我没有看到?
答案 0 :(得分:8)
你可以尝试
rowSums(df[,colsToAdd, drop=FALSE])
根据?'['
默认情况下,
x[i, j, ... , drop = TRUE]
基于文档
drop:对于矩阵和数组。如果为“TRUE”,结果将被强制转换为 尽可能低的维度