#r #function #if-statement #paste #read.table
#r #функция #if-оператор #вставить #read.table
Вопрос:
Функция вроде как запускается. Он выводит список лет вместо чтения в 104 файлах на моем компьютере. Я также попытался настроить knitr и код, приведенный ниже в комментариях. Я открыт для идей о внутренней части функции (year =»all»), но моя домашняя работа требует, чтобы мы использовали функцию вставки.
setwd("C:/Users/Sarah/Downloads/names-full-datasets/names-full-datasets")
library(purrr)
baby.names <- function(year="all"){
if(year!="all"){cnames <- read.table(paste("yob",year,".txt", sep =
""),header = FALSE,
sep = ",", col.names = c("Name","Sex","Count"))
cnames$year <- year
}
else
{
cnames <- lapply(1910:2013, baby.names)
ldply(cnames)
}
}
yall <- baby.names()`
```
Комментарии:
1. Насколько я могу судить, значение
year
аргумента по умолчанию в вашей функции равно «all». Но функция устанавливает рабочий каталог только в том случае, если значение не равно «all». Кроме того, вы уже установили каталог вне функции. Я бы посоветовал поискать на этом сайте другие решения, есть много похожих вопросов с хорошими ответами.2. Это для домашнего задания, поэтому мой учитель попросил нас установить для функции значение all. Затем запустите ее так, чтобы она выполнялась все годы. Поскольку это домашнее задание, я должен сохранить его в функции с целью получения полной оценки, хотя есть более простые способы сделать это.
3.Но вы должны написать свою функцию так, чтобы она работала независимо от того,
year
установлено"all"
значение или нет. Рабочий каталог остается неизменным, независимо от того,year
установлено"all"
значениеsetwd()
или нет, поэтому, по крайней мере, ставьте передif()
, а не внутри него.4. Извините, я исправил это в исходном коде, но вставил неправильную версию
Ответ №1:
Я смог найти ответ, мне просто нужно было добавить return. Спасибо за всю помощь!
library(plyr)
setwd("C:/Users/Sarah/Downloads/names-full-datasets/names-full-datasets")
baby.names <- function(year="all"){
if(year!="all"){cnames <- read.table(paste("yob", year, ".txt", sep = ""), header = FALSE, sep = ",", col.names = c("Name","Sex","Count"))
cnames$year <- year
return(cnames)
}
else
{
cnames1 <- lapply(1910:2013, baby.names)
ldply(cnames1)
}
}