Функция R для извлечения данных ESS, "не удалось найти функцию вставки" - PullRequest
0 голосов
/ 23 января 2020

Из пакета "essurvey" у меня есть набор данных (в виде объекта "списка"), из которого я пытаюсь получить все раунды ESS для всех стран. Чтобы сделать это несколько эффективно, я пытаюсь создать функцию, которая будет делать это для меня, однако у меня возникают проблемы: во-первых, если я использую функцию «вставить» для получения имен объекта, я получаю ошибку: Error in paste: could not find function "paste<-" , Во-вторых, при попытке задать имя с помощью функции, просто чтобы посмотреть, будет ли она работать без вставки, она запускается без ошибок, но также безрезультатно. Кто-нибудь, кто может увидеть решение? Всю помощь я оценил!

ESS_Load <- function(N, CC){
temp <- Data[[N]]
paste(N, CC, sep = "_") <-
subset(temp, cntry == CC)
rm(temp)


}

ESS_Load(9, "NO")

1 Ответ

1 голос
/ 23 января 2020

Как я понял из вашего комментария, вы хотите создать фрейм данных с именем {CC}_{N} в своей среде вызова в качестве побочного эффекта вашей функции.

Это может быть достигнуто следующим образом:

# first build sample data
set.seed(1)
Data <- list(iris[sample(nrow(iris),5),], iris[sample(nrow(iris),5),])
Data
#> [[1]]
#>     Sepal.Length Sepal.Width Petal.Length Petal.Width    Species
#> 68           5.8         2.7          4.1         1.0 versicolor
#> 129          6.4         2.8          5.6         2.1  virginica
#> 43           4.4         3.2          1.3         0.2     setosa
#> 14           4.3         3.0          1.1         0.1     setosa
#> 51           7.0         3.2          4.7         1.4 versicolor
#> 
#> [[2]]
#>     Sepal.Length Sepal.Width Petal.Length Petal.Width    Species
#> 85           5.4         3.0          4.5         1.5 versicolor
#> 21           5.4         3.4          1.7         0.2     setosa
#> 106          7.6         3.0          6.6         2.1  virginica
#> 74           6.1         2.8          4.7         1.2 versicolor
#> 7            4.6         3.4          1.4         0.3     setosa

iris_Load <- function(N, CC){
  nm <- paste(CC, N, sep = "_")
  res <- subset(Data[[N]], Species == CC)
  assign(nm, res, envir = parent.frame()) # create your object with right name and value in calling environment
  invisible() # will return NULLL without printing
}

iris_Load(1, "setosa")
setosa_1
#>    Sepal.Length Sepal.Width Petal.Length Petal.Width Species
#> 43          4.4         3.2          1.3         0.2  setosa
#> 14          4.3         3.0          1.1         0.1  setosa

Если вы можете позволить себе сделать следующее, возможно, это лучшая практика, однако функции с побочными эффектами могут быть неожиданными и, как правило, не приветствуются в большинстве случаев:

...