【问题标题】:R error : arguments imply differing number of rowsR错误:参数暗示不同的行数
【发布时间】:2016-03-05 12:31:33
【问题描述】:

所以我尝试使用 for 循环在数据帧的几列上操作一个函数。

z <- function(x) gsub("[^\\.\\d]", "", x, perl = TRUE)
data <- cbind(data[1:2], for(i in seq(3, 9)) {y(data[[i]])})

我一直遇到主题中提到的错误

arguments imply differing number of rows

我所有列的行数都一样。

我尝试为此使用 lapply,但尽管它有效,但它会将我应用函数的列类型转换为因子。这些列是数值,但最初是作为文件中的字符读取的(它们按原样存储)。因此,当我在使用 lapply 后尝试转换为数字时,我会得到级别数作为输出(例如 1、2、3...)

欢迎使用 for 循环或 lapply 提出任何建议。提前致谢。

> dput(head(data,3))
structure(list(MCF.Channel.Grouping = structure(c(6L, 6L, 6L), .Label = c("(Other)", 
"Direct", "Display", "Email", "Organic Search", "Paid Search", 
"Referral", "Social Network"), class = "factor"), Device.Category = structure(c(2L, 
1L, 3L), .Label = c("desktop", "mobile", "tablet"), class = "factor"), 
Spend = c("A$503,172.17", "A$375,940.43", "A$92,560.94"), 
Clicks = c("1,545,416", "1,037,740", "291,314"), Impressions = c("7,328,657", 
"3,787,612", "1,178,508"), Data.Driven.Conversions = c("1,697,814.32", 
"1,540,810.43", "430,738.63"), Data.Driven.CPA = c("A$0.30", 
"A$0.24", "A$0.21"), Data.Driven.Conversion.Value = c("A$12,815,842.66", 
"A$13,883,073.58", "A$3,804,800.15"), Data.Driven.ROAS = c("2547.01%", 
"3692.89%", "4110.59%")), .Names = c("MCF.Channel.Grouping", 
"Device.Category", "Spend", "Clicks", "Impressions", "Data.Driven.Conversions", 
"Data.Driven.CPA", "Data.Driven.Conversion.Value", "Data.Driven.ROAS"
), row.names = c(NA, 3L), class = "data.frame")

【问题讨论】:

  • 为什么这个data.table/dplyr相关?
  • 我建议您从您的工作区发布 dput 对象 data
  • 抱歉,删除这些标签。我在同一个窗口中输入了另一个与 dplr 相关的问题,但后来我明白了。
  • 试试data[-(1:2)] &lt;- lapply(data[-(1:2)], z)
  • 成功了,谢谢@PierreLafortune!请问为什么我的方法不一样?

标签: r


【解决方案1】:

我们可以使用

data[-(1:2)] <- lapply(data[-(1:2)], z)

函数在不是第一或第二的列上运行。输出分配给数据中的同一子集。

原始方法不起作用,因为for 循环不会导致保存的输出。通过尝试将其保存为变量来检查:

x <- for(i in seq(3, 9)) {z(data[[i]])}
x
NULL

即使我们保存了循环的内容,也没有捕获任何内容。循环运行然后转储结果。要查看循环如何工作,我们可以在以下范围内分配值:

for ( i in 3:9) data[,i] <- z(data[,i])

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-04
    • 1970-01-01
    • 2022-01-24
    • 2015-02-04
    • 1970-01-01
    相关资源
    最近更新 更多