2016-03-05 5 views
0

Так что я пытаюсь управлять функцией по нескольким столбцам фрейма данных, используя цикл for.Ошибка R: аргументы подразумевают различное количество строк

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 для этого, но, хотя он работает, он преобразует типы столбцов, по которым я применяю функцию к коэффициенту. Столбцы являются числовыми значениями, но изначально считаются символами из файла (они хранятся как таковые). Поэтому, когда я пытаюсь преобразовать в числа после использования, я получаю количество уровней в качестве вывода (например, 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") 
+0

Почему этот data.table/dplyr связан? – Arun

+0

У меня есть предложение опубликовать 'dput' объектов' data' из вашей рабочей области – jangorecki

+0

Извините, удалив эти теги. Я ввел еще один вопрос в том же окне, связанный с dplr, но потом я понял это. –

ответ

0

Мы можем использовать

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])