Artículo largo de 7000 palabras, 10 errores en R y cómo corregirlos (colección recomendada)

Presenta errores comunes de R y cómo corregirlos
 1. Paréntesis, llaves, corchetes o comillas que no coinciden
 2. Uso de funciones que no están instaladas o cargadas 
3. Ortografía en nombres de funciones, variables, conjuntos de datos, objetos o paquetes Errores
 4. Argumentos faltantes, incorrectos o mal escritos en las funciones
 5. Tipos de datos incorrectos, inapropiados o inconsistentes
 6. Olvidar el signo + en ggplot2
 7. Malentendido = y ==
 8. Columna indefinida seleccionada
 9. Problemas al importar o usando el archivo de datos incorrecto
 10. Problemas al usar el operador $
 El operador $ no es válido para vectores atómicos
 Los objetos de tipo 'cierre' no se pueden subestablecer

Advertencia  NA introducidos por la fuerza
 Eliminado... filas que contienen valores no finitos ​​(stat_bin())
Introducción
Si es nuevo en R, a menudo encontrará errores en su código que impiden que se ejecute. Recuerdo que cuando comencé a usar R, los errores de código ocurrían con frecuencia y casi dejo de aprender este lenguaje de programación. Incluso recuerdo volver a Excel varias veces para completar mi análisis porque no podía encontrar la causa del problema.
Por suerte, me obligué a seguir adelante a pesar de la dificultad al principio. Y hoy, aunque todavía encuentro errores casi cada vez que escribo código R, con la experiencia y la práctica se necesita cada vez menos tiempo para corregirlos. Si tuvo problemas al principio, no se preocupe, es normal: todo el mundo experimenta cierta frustración al aprender un nuevo lenguaje de programación (no solo R).
En esta publicación, destaco 10 de los errores más comunes en R y cómo solucionarlos. Por supuesto, los errores dependen de su código y su análisis, por lo que es imposible cubrir todos los errores (Google hace un trabajo mucho mejor que yo). Sin embargo, quiero resaltar algunos errores de sintaxis comunes que ocurren a menudo cuando se aprende R y, a veces, puede llevar mucho tiempo resolver estos errores antes de darnos cuenta de que la solución está justo frente a nuestros ojos.
Esta colección se basa en mi experiencia personal y los errores que cometen mis alumnos cuando enseño R. Esta lista no es exhaustiva, siéntase libre de comentar (al final de la publicación) los errores que encuentra a menudo al usar R.
Para cada error, proporciono ejemplos y soluciones para corregirlos. También mencioné algunas advertencias al final de la publicación (estrictamente hablando, esto no es un error).

1. Corchetes, llaves, corchetes o comillas que no coinciden
Un error bastante trivial pero común es la falta de corchetes, llaves, corchetes o comillas.
Este tipo de error se aplica a muchos lenguajes de programación. Por ejemplo, en R:

Falta el paréntesis de cierre:

mean(c(1, 7, 13)

Faltan llaves antes de "else":

x <- 7 
if(x > 10) {
    
    
        print("x > 10")
             else {
    
    
                     print("x <= 10")
             }
             
             ## 缺少方括号:
             summary(ggplot2::diamonds[, "price")
             
             ## 第二个元素中缺少右引号:
             grp <- c("Group 1", "Group 2) 
grp

Estos errores son fáciles de detectar cuando el código es un código básico simple, pero pueden volverse más difíciles de detectar cuando el código es más complejo, por ejemplo:

for (i in y) {
    
    
  for (j in x) {
    
    
    p <- ggboxplot(dat,
      x = colnames(dat[j]), y = colnames(dat[i]),
      color = colnames(dat[j]),
      legend = "none",
      palette = "npg",
      add = "jitter"
    )
    print(
      p + stat_compare_means(aes(label = paste0(..method.., ", p-value = ", ..p.format..),
        method = method1, label.y = max(dat[, i], na.rm = TRUE)
      )
      + stat_compare_means(comparisons = my_comparisons, method = method2, label = "p.format")
    )
  }

inserte la descripción de la imagen aquí
Afortunadamente, si usa RStudio, 2 escribirá automáticamente una oración de cierre cuando abra un paréntesis, una llave, un corchete o una comilla.
Recuerde que al instalar un paquete debe usar comillas (simples o dobles) alrededor del nombre del paquete:

## NOT correct:
install.packages(ggplot2)

Error en install.packages: objeto 'ggplot2' no encontrado

## correct:
install.packages("ggplot2")

## also correct:
install.packages("ggplot2")

La solución La
solución, por supuesto, es simplemente unir todos los paréntesis de apertura, llaves, corchetes y comillas con sus contrapartes de cierre.

mean(c(1, 7, 13))
## [1] 7
x <- 7
if (x > 10) {
    
    
  print("x > 10")
} else {
    
    
  print("x <= 10")
}
## [1] "x <= 10"
summary(ggplot2::diamonds[, "price"])
##      price      
##  Min.   :  326  
##  1st Qu.:  950  
##  Median : 2401  
##  Mean   : 3933  
##  3rd Qu.: 5324  
##  Max.   :18823
grp <- c("Group 1", "Group 2")
grp
## [1] "Group 1" "Group 2"

Además, asegúrese de colocar las comas correctamente:

Incorrecto (falta una coma):

c("Group 1," "Group 2")

Error: constante de cadena inesperada en "c(“Grupo 1,” “Grupo 2"”

También incorrecto (falta la coma):

c("Group 1" "Group 2")

Error: constante de cadena inesperada en "c ("Grupo 1" "Grupo 2""

correcto:

c("Group 1", "Group 2")

2. Usando una función que no está instalada o no está cargada (es decir, el paquete no está instalado o no está cargado)
Si encuentra el siguiente error: "Error en...: no se pudo encontrar la función '...'", por ejemplo
inserte la descripción de la imagen aquí
: significa que está tratando de usar una función que pertenece a un paquete que no ha sido instalado o cargado.

Solución
Para resolver este error, debe instalar el paquete (si aún no está instalado) y cargarlo con las funciones install.packages() y library() respectivamente:

## install package:
install.packages("ggplot2")

## load package:
library(ggplot2)

Si no está seguro del uso de estas dos funciones, consulte Instalación y carga de paquetes en R para obtener más detalles.

3. Errores tipográficos en nombres de funciones, variables, conjuntos de datos, objetos o paquetes
Otro error común es escribir mal el nombre de una función, variable, conjunto de datos, objeto o paquete, por ejemplo:

## 函数名称中的拼写错误:
maen(c(1, 7, 13))

Error en maen (c (1, 7, 13)): no se pudo encontrar la función "maen"

## 变量名称中的拼写错误:
summary(ggplot2::diamonds[, "detph"])

Error: la columna detphno existe

Error tipográfico en el nombre del conjunto de datos:

data <- data.frame(
  x = rnorm(10),
  y = rnorm(10)
)
summary(dta[, 2])

Error en resumen (dta [, 2]): objeto 'dta' no encontrado

Nombre del objeto mal escrito:

test <- c(1, 7, 13)
mean(tset)

Error en la media (tset): objeto 'tset' no encontrado

Nombre del paquete mal escrito:

library("tydiverse")

Error en la biblioteca ("tydiverse"): no hay un paquete llamado 'tydiverse'

Solución:
asegúrese de escribir correctamente todas las funciones, variables, conjuntos de datos, objetos y paquetes
Tenga en cuenta que R distingue entre mayúsculas y minúsculas; ¡mean() se considera diferente de la media() de R!

mean(c(1, 7, 13))
## [1] 7
summary(ggplot2::diamonds[, "depth"])
##      depth      
##  Min.   :43.00  
##  1st Qu.:61.00  
##  Median :61.80  
##  Mean   :61.75  
##  3rd Qu.:62.50  
##  Max.   :79.00
data <- data.frame(
  x = rnorm(10),
  y = rnorm(10)
)
data[, 2]
##  [1]  1.3048697  2.2866454 -1.3888607 -0.2787888 -0.1333213  0.6359504
##  [7] -0.2842529 -2.6564554 -2.4404669  1.3201133
test <- c(1, 7, 13)
mean(test)
## [1] 7
library(tidyverse)
## ── Attaching packages ─────────────────────────────────────── tidyverse 1.3.2 ──
## ✔ ggplot2 3.4.0      ✔ purrr   0.3.5 
## ✔ tibble  3.1.8      ✔ dplyr   1.0.10
## ✔ tidyr   1.2.1      ✔ stringr 1.4.1 
## ✔ readr   2.1.3      ✔ forcats 0.5.2 
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag()    masks stats::lag()

Si está seguro de que ha escrito correctamente un objeto, una función o un conjunto de datos, pero sigue recibiendo un error que dice "no se encuentra el objeto '...'", ¡asegúrese de definirlo!

A menudo sucede que un estudiante me pide que vaya a su computadora porque ejecuta exactamente el mismo código que yo y no puede hacerlo funcionar. La mayoría de las veces, si su código es exactamente como el mío, simplemente no ejecuta el objeto/función/conjunto de datos antes de ejecutar el código que contiene ese objeto/función/conjunto de datos. En otras palabras, solo está tratando de usar un objeto o variable indefinida.
Recuerde, escribir código en un script R (a diferencia de la consola) no significa que esté compilado. En realidad, debe ejecutarlo (presionando el botón Ejecutar o usando un atajo de teclado) para que el código se ejecute y se use más tarde. Si todavía tiene problemas con esto, consulte Conceptos básicos de R y RStudio.
4. Argumentos faltantes, incorrectos o mal escritos en las funciones
La mayoría de las funciones de R requieren argumentos. Por ejemplo, la función rnorm() requiere al menos el número de observaciones especificado por el parámetro n.
Si no especifica un parámetro requerido o especifica un parámetro incorrectamente, su código no se ejecutará. Además, si escribe mal un parámetro, es posible que el resultado no sea el esperado:

Falta el parámetro obligatorio:

rnorm()

Error en rnorm (): falta el argumento "n", sin valor predeterminado

Parámetro incorrecto:

rnorm(n = 3, var = 1)

Error en rnorm (n = 3, var = 1): argumento no utilizado (var = 1)

Parámetro incorrecto:

mean(c(1, 7, 13, NA), narm = TRUE)
## [1] NA

El último fragmento de código no arroja un error, pero el resultado no es el que queremos.
Solución alternativa:
para resolver estos errores, asegúrese de especificar al menos todos los parámetros obligatorios de la función y los correctos:
en rnorm(), además del número de observaciones n, también puede especificar la desviación estándar sd (en lugar de la varianza var).
La eliminación de NA se realiza con na.rm (no narm).
demostración correcta

rnorm(n = 3, sd = 1)
## [1] -0.3066386 -1.7813084 -0.1719174
mean(c(1, 7, 13, NA), na.rm = TRUE)
## [1] 7

Si no conoce los parámetros de una función, siempre puede consultar la documentación con ?function_nam (nombre de la función) o help(function_name) (nombre de la función), por ejemplo:

?rnorm()
## or:
help(rnorm)

5. Tipos de datos incorrectos, inapropiados o inconsistentes
En R existen varios tipos de datos, los principales son

Numérico, Caracter, Factor, Lógico
Usted sabe que algunas operaciones y análisis son posibles, y solo para ciertos tipos de datos.
Por ejemplo, no es apropiado calcular la media de un factor o una variable de carácter:

gender <- factor(c("female", "female", "male", "female", "male"))

mean(gender)
## Warning in mean.default(gender): argument is not numeric or logical: returning
## NA
## [1] NA

Además, si bien es técnicamente posible, no tiene sentido trazar un gráfico de barras para una variable cuantitativa continua, ya que en la mayoría de los casos cada valor tiene una frecuencia de 1:

inserte la descripción de la imagen aquí

(Por cierto, no olvide agregar table() a la función barplot() si sus datos aún no están en formato tabular. Solución Asegúrese de usar la operación y el tipo de análisis apropiados dependiendo de la variable de interés
.
Por
ejemplo :
Para variables factoriales es más adecuado calcular la frecuencia y/o frecuencia relativa y dibujar un histograma
Para variables continuas cuantitativas es más adecuado calcular la media, mediana, etc., y dibujar un histograma, histograma, etc.
Para variables lógicas, es adecuado Usar medias, tablas de frecuencia e histogramas
Para variables de caracteres, las nubes de palabras son las más apropiadas (a menos que la variable pueda tratarse como una variable factorial, ya que no hay muchos niveles diferentes)
. estos ejemplos en R:

## factor:
table(gender)
## gender
## female   male 
##      3      2
prop.table(table(gender))
## gender
## female   male 
##    0.6    0.4
barplot(table(gender))

inserte la descripción de la imagen aquí

## quantitative continuous:
x <- rnorm(100)

summary(x)
##     Min.  1st Qu.   Median     Mean  3rd Qu.     Max. 
## -2.99309 -0.74143  0.01809 -0.08570  0.58937  2.70189
par(mfrow = c(1, 2)) ## combine two plots
hist(x)
boxplot(x)

inserte la descripción de la imagen aquí

## logical:
x <- c(TRUE, FALSE, FALSE, TRUE, TRUE)

mean(x)
## [1] 0.6
table(x)
## x
## FALSE  TRUE 
##     2     3
barplot(table(x))

inserte la descripción de la imagen aquí
Para los lectores interesados, consulte las estadísticas descriptivas más utilizadas en R para diferentes tipos de datos.
Tenga en cuenta que, al igual que con las estadísticas descriptivas, la elección de la prueba estadística depende del tipo de variable. Eche un vistazo a este diagrama de flujo para ayudarlo a elegir la prueba estadística más adecuada según el número y el tipo de variables.
Relacionado con el error mencionado anteriormente está la inconsistencia del tipo de datos. Puedes verlo en acción con el siguiente ejemplo:

x <- c(2.4, 3.7, 5.1, 9.8)
class(x)
## [1] "numeric"
y <- c(2.4, 3.7, 5.1, "9.8")
class(y)
## [1] "character"

Como puede ver, el vector x es numérico mientras que el vector y está en forma de caracteres. Esto se debe al hecho de que el último elemento de y está entre comillas (y, por lo tanto, se trata como una cadena en lugar de un valor numérico), por lo que todo el vector está en forma de carácter.
Esto puede suceder cuando importa un conjunto de datos a R y uno o más elementos de una variable no están codificados correctamente. Esto hace que R trate la variable completa como una variable de carácter.
Para evitar esto, es una buena idea verificar la estructura del conjunto de datos (usando str()) después de importarlo para asegurarse de que todas las variables tengan el formato deseado. Si no, puedes corregir los valores en el archivo inicial, o cambiar el formato en R (usando as.numberic()).
6. Olvidar el signo + en ggplot2
Si acabas de aprender a usar el paquete ggplot2 para la visualización (¡lo recomiendo encarecidamente!), un error común es olvidar el signo +.
Ya sabes, las visualizaciones hechas con ggplot2 se crean agregando varias capas:

## load package:
library(ggplot2)
## first layer, the dataset:
ggplot(data = diamonds) +
  ## second layer, the aesthetics:
  aes(x = cut, y = price) +
  ## third layer, the type of plot:
  geom_boxplot() +
  ## add more layers:
  theme_minimal()

inserte la descripción de la imagen aquí
Solución
Para todos los gráficos que usan ggplot2, no olvide agregar un signo + después de cada capa, excepto la última.
7. Conceptos erróneos entre = y == La asignación
en R se puede hacer de tres formas, de la más común a la menos común:
1.<-
2.=
3.assign()
El segundo método, que es =, no debe confundirse con ==.
De hecho, los objetos de asignación (en cualquiera de las tres formas anteriores) se usan para contener algo en R. Por ejemplo, si queremos guardar el vector (1, 3, 7) y renombrar ese vector x, podemos escribir:

x <- c(1, 3, 7)

## or:
x = c(1, 3, 7)

## or:
assign("x", c(1, 3, 7))

Cuando se ejecuta este código, verá que aparece un vector x de tamaño 3 en la pestaña "Entorno" (panel superior derecho si está utilizando la vista predeterminada de RStudio)

inserte la descripción de la imagen aquí

De ahora en adelante, podemos usar este vector llamando a su nombre:
x

[1] 1 3 7

Pero eso no significa que puedas usar == para asignar un objeto:
##Si queremos asignar c(1,3,7) a x, no es correcto:

x==c(137##Error: object 'x' not found

Así que estás pensando, ¿cuándo necesitamos usar ==? De hecho, se usa cuando quieres usar el signo igual.
Sé que puede ser abstracto y confuso en este momento, así que supongamos los siguientes dos casos como ejemplos (estos son los dos casos más comunes en los que usamos ==): Queremos verificar si un objeto o variable asignado se ajusta a Ciertas
condiciones , y queremos crear subconjuntos de un marco de datos en función de una o varias condiciones.
Para estos ejemplos, suponga una muestra de 5 niños:

## create dataframe:
dat <- data.frame(
  Name = c("Mary", "Linda", "James", "John", "Patricia"),
  Age = c(7, 10, 3, 9, 7),
  Gender = c("Girl", "Girl", "Boy", "Boy", "Girl")
)
## print dataframe:
dat
##       Name Age Gender
## 1     Mary   7   Girl
## 2    Linda  10   Girl
## 3    James   3    Boy
## 4     John   9    Boy
## 5 Patricia   7   Girl

Ahora escribamos un código diferente para estos dos escenarios para ilustrarlos:
supongamos que queremos verificar si la variable Edad es igual al vector (1, 2, 3, 4, 5):

dat$Age == 1:5
## [1] FALSE FALSE  TRUE FALSE FALSE

Con este código, estamos preguntando si el primer elemento de la variable Edad es igual a 1, el segundo elemento de la variable Edad es igual a 2, y así sucesivamente. La respuesta es por supuesto FALSO, FALSO, VERDADERO, FALSO y FALSO, porque solo el tercer hijo tiene una edad igual a 3.
Supongamos que queremos saber cuáles de los 5 niños de la muestra son niñas:

dat$Gender == "Girl"
## [1]  TRUE  TRUE FALSE FALSE  TRUE

Los resultados mostraron que el primer, segundo y quinto hijo eran niñas, mientras que el tercer y cuarto hijo no eran niñas.

Si escribes cualquiera de estas dos líneas:

## this overwrites Age and Gender:
dat$Age = 1:5
dat$Gender = "Girl"

En realidad, está anulando las variables de edad y sexo para que nuestros 5 hijos tengan edades comprendidas entre 1 y 5 años (el 1.er hijo es 1 y el 5.º es 5), todos ellos niñas. (Cuenta pública @天桥下的买良人: es equivalente a recodificar la edad)

Ahora supongamos que queremos crear un subconjunto de nuestro marco de datos en función de una condición, es decir, queremos extraer solo los niños que tienen 7 años:

subset(dat, Age == 7)
##       Name Age Gender
## 1     Mary   7   Girl
## 5 Patricia   7   Girl

Si no desea utilizar la función de subconjunto, también puede utilizar corchetes:

dat[dat$Age == 7, ]
##       Name Age Gender
## 1     Mary   7   Girl
## 5 Patricia   7   Girl

Como puede ver en los ejemplos anteriores, no queremos asignar nada. En cambio, lo que estamos preguntando es "¿esta variable o vector es igual a otra cosa?". Para esta necesidad específica, usamos ==.
Entonces, para resumir, por razones técnicas y para diferenciar los dos conceptos, R usa = para asignación y == para símbolo de igualdad. Asegúrese de entender la diferencia entre los dos para evitar errores. (Cuenta pública @天桥下的买人: = es para asignar un valor a los datos, == es para juzgar si dos valores o vectores son iguales) 8.
Seleccione una columna indefinida
Si está acostumbrado a usar corchetes [ ], y en lugar de usar las funciones subset() o filter() para crear un subconjunto del conjunto de datos, es posible que encuentre un error como
"Error en [.data.frame(...) : columnas no definidas seleccionadas".

Esto sucede cuando R no comprende las columnas que desea usar al crear subconjuntos del conjunto de datos.

Teniendo en cuenta la misma muestra de 5 niños presentada anteriormente, el siguiente código generará un error:

dat[dat$Age == 7]

Error en [.data.frame(dat, dat$Age == 7): columnas indefinidas seleccionadas

Porque no especifica la dimensión de la columna. (Cuenta pública @天桥下的买良人: Falta una coma, no sé si es una fila o una columna, por lo que no está definida)

Solución
Tenga en cuenta que los marcos de datos de R tienen dos dimensiones:
filas (una para cada unidad experimental) y columnas (una para cada variable).
Y en un orden específico (¡las filas primero, luego las columnas!)
Debido a que los marcos de datos tienen dos dimensiones, cuando llamas a dat[], R espera dos dimensiones.
En particular, espera la primera dimensión, seguida de la segunda, separada por comas:

dat[dat$Age == 7, ]
##       Name Age Gender
## 1     Mary   7   Girl
## 5 Patricia   7   Girl

Este código significa que estamos extrayendo todas las filas (primera dimensión, es decir, antes de la coma) donde Edad es igual a 7, para todas las variables del conjunto de datos (ya que no especificamos ninguna columna después de la coma).
Para los lectores interesados, vea más formas de crear subconjuntos y manipular datos en R.
9. Problemas al importar o usar archivos de datos incorrectos
La importación de conjuntos de datos en R puede ser un gran desafío para los principiantes, principalmente debido a malentendidos sobre los directorios de trabajo.
Al importar un archivo, R no busca el archivo en todas las carpetas de su computadora. En cambio, solo buscará en una carpeta específica. Si su conjunto de datos no está en esa carpeta, dará como resultado un error, "no se puede abrir el archivo '...': No existe tal archivo o directorio":
inserte la descripción de la imagen aquí

Para solucionar esto, debe especificar la ruta a la carpeta donde se encuentra su conjunto de datos. En otras palabras, debe decirle a R en qué carpeta desea que funcione, de ahí el término directorio de trabajo.
La configuración del directorio de trabajo se puede hacer con la función setwd() o a través de la pestaña "Archivos" en la esquina inferior derecha de RStudio:
inserte la descripción de la imagen aquí
Alternativamente, puede mover el conjunto de datos a la carpeta donde R está trabajando actualmente (esto se puede encontrar con setwd ()). Vea más detalles sobre la importación de archivos en R y detalles sobre los directorios de trabajo.

Otro problema relacionado es usar el archivo incorrecto. Este error es diferente de los errores anteriores en que no encuentra errores, pero su análisis sigue siendo incorrecto.
Esto suena trivial, ¡pero asegúrese de importar y usar el archivo de datos correcto! ¡Esto es especialmente importante en su trabajo! Esto es especialmente cierto si tiene archivos en diferentes momentos que comparten una estructura común (por ejemplo, archivos de datos semanales o mensuales con exactamente las mismas variables). Estuve en una situación en la que informé los resultados de la semana equivocada (afortunadamente, sin consecuencias).
Además, asegúrese de usar realmente todas las filas que desea incluir en su análisis. Me he encontrado con situaciones en las que, para probar un modelo (y evitar largos cálculos), extraigo una muestra aleatoria del conjunto de datos original y casi me olvido de ella cuando ejecuto mi análisis final.
Por lo tanto, es una buena práctica recordarle que elimine las muestras y los filtros después de probar su código (antes de interpretar los resultados finales). (Cuenta pública @天桥下的Bucker: preste atención a si los datos seleccionados por su modelo son correctos, ya sean datos originales, datos ordenados o datos de muestra)

10. $Problemas al usar operadores
Para el último error de este top 10, quiero centrarme en dos errores relacionados:
“$operador no es válido para vectores atómicos”, y
“objeto de tipo 'cierre' no es subconfigurable”.
He agrupado en un capítulo porque están relacionados y porque todos involucran el operador $.
El operador no es válido en vectores atómicos.Para comprender este error, primero debemos recordar que un vector atómico es un objeto unidimensional (generalmente creado con c()). Esto es diferente de un marco de datos o matriz, que es bidimensional (es decir, las filas forman la primera dimensión y las columnas corresponden a la segunda). Cuando tratamos de usar el operador dólar (el operador ' no es válido para vectores atómicos, para comprender este error, primero debemos recordar que un vector atómico es un objeto unidimensional (generalmente creado con c()). Esto no es lo mismo que un marco de datos o matrices, que son bidimensionales (es decir, las filas forman la primera dimensión y las columnas corresponden a la segunda) Cuando tratamos de usar el operador dólar (`El operador no es válido en vectores atómicos.Para entender este error, primero debemos recordar que un vector atómico es un objeto unidimensional (generalmente creado con c ( ) ) . Esto es diferente de un marco de datos o matriz, que es bidimensional (es decir, las filas forman la primera dimensión y las columnas corresponden a la segunda). Cuando intentamos acceder a un elemento de un vector atómico usando el operador dólar ( ' `), obtenemos un error "El operador $ no es válido para vectores atómicos":

## define atomic vector:
x <- c(1, 3, 7)

## set names:
names(x) <- LETTERS[1:3]

## print vector:
x
## A B C 
## 1 3 7
## access value of element C:
x$C

Error en x$C: el operador $ no es válido para vectores atómicos

Solución
El operador $ no se puede usar para extraer elementos en vectores atómicos. En su lugar, debemos usar la notación de corchetes dobles [[ ]]:

x[["C"]]
## [1] 7

Recuerde que los operadores se pueden usar en marcos de datos, por lo que también podemos corregir este error convirtiendo primero los vectores atómicos en marcos de datos, y luego los operadores se pueden usar en marcos de datos, por lo que también podemos resolver este error convirtiendo primero el vector atómico vectores Para corregir este error para un marco de datos, utiliceLos operadores se pueden usar en DataFrames, por lo que también podemos evitar este error convirtiendo primero el vector atómico en un DataFrame y luego usando el operador para acceder a un elemento por su nombre:

convertir vector atómico a marco de datos:

x <- as.data.frame(t(x))

## print x:
x
##   A B C
## 1 1 3 7
## access value of element C:
x$C
## [1] 7

el objeto de tipo 'cierre' no se puede subestablecer, el objeto de tipo 'cierre' no se puede
subestablecer .
Este error ocurre cuando intentamos subconjuntos o acceder a algunos elementos de una función. Tome la famosa función mean() como ejemplo:

mean[1:3]

Error en la media [1: 3]: el objeto de tipo 'cierre' no se puede subestablecer

En R, podemos crear subconjuntos de listas, vectores, matrices, marcos de datos, pero no funciones. Entonces arroja un error porque no es posible subconjunto de un objeto de tipo "cierre", mientras que una función es de este tipo:

typeof(mean)
## [1] "closure"

La mayoría de las veces no se encontrará con este error cuando use funciones básicas como la función mean() (ya que es poco probable que su objetivo sea realmente crear un subconjunto de una función...).
De hecho, es probable que obtenga este error cuando intente crear subconjuntos de un conjunto de datos llamado data, pero este conjunto de datos no está definido en el entorno (porque no se importó o creó correctamente, por ejemplo).
Para entender este concepto, observe el siguiente ejemplo:

crear un dato

data <- data.frame(
  x = rnorm(10),
  y = rnorm(10)
)
## print variable x:
data$x
##  [1]  1.12288964  1.43985574 -1.09711377 -0.11731956  1.20149840 -0.46972958
##  [7] -0.05246948 -0.08610730 -0.88767902 -0.44468400
到目前为止还不错。现在假设我们在创建数据集时犯了一个错误:
## create dataset (with mistake):
data <- data.frame(x = rnorm(10)
                   y = rnorm(10))

Notará que falta una coma entre las variables x e y. Por lo tanto, el conjunto de datos denominado data no se creó y, por lo tanto, no se definió.
Entonces, si ahora tratamos de acceder a la variable x desde este conjunto de datos, R en realidad intentará crear un subconjunto de la función con nombre de datos en lugar del conjunto de datos con nombre de datos. (Cuenta pública @天桥下的Bucker: cuando R no puede hacer los datos que define, elegirá una función con el mismo nombre de la biblioteca para definir, por lo que se producirá este tipo de error)

data$x

Error en data$x: el objeto de tipo 'cierre' no se puede subestablecer

Esto se debe a que, repito, el conjunto de datos data no existe, entonces R busca un objeto llamado data y encuentra una función con ese nombre:

class(data)
## [1] "function"

Advertencias
Las advertencias se diferencian de los errores en que le alertan sobre algo, pero no le impiden ejecutar el código. Es una buena práctica leer estas advertencias, ya que pueden brindarle información valiosa.

Hay demasiadas advertencias para enumerarlas todas, pero quiero resaltar dos comunes:
"NA introducidas por coerción" y
"Eliminadas... filas que contienen valores no finitos (stat_bin())". Valores
de NA introducidos forzados
cuando recibe esta advertencia cuando intenta convertir un vector que contiene al menos un valor no numérico en un vector numérico:

x <- c(1, 3, 7, "Emma")
as.numeric(x)
## Warning: NAs introduced by coercion
## [1]  1  3  7 NA

No necesita arreglarlo porque es solo una advertencia y no un error. R solo le informa que al menos un elemento en el vector inicial se convirtió a NA porque no se puede convertir a un valor numérico.

Eliminado... filas que contienen valores no finitos (stat_bin())
Esta advertencia ocurre cuando usa ggplot2 para dibujar gráficos. Por ejemplo

ggplot(airquality) +
  aes(x = Ozone) +
  geom_histogram()

stat_bin()usando bins = 30_ Elija un mejor valor con binwidth.

Advertencia: Se eliminaron 37 filas que contenían valores no finitos ( stat_bin()).

inserte la descripción de la imagen aquí

Nuevamente, dado que es una advertencia, no es necesario que lo corrija. Solo le informa que faltan algunos valores (NA) en la variable de interés que se eliminarán para construir el gráfico.

Gracias por leer. Espero que esta colección de errores le impida cometer algunos errores de codificación o le ayude a depurar su código.

Si aún no puede resolver su error, le recomiendo leer la documentación de la función (si tiene problemas con una función en particular) o buscar una solución en línea. Tenga en cuenta que si se encuentra con un error, es probable que alguien más publique una respuesta en línea (Stack Overflow suele ser un gran recurso).
R tiene una curva de aprendizaje pronunciada, especialmente si eres nuevo en otros lenguajes de programación. Aún así, con la práctica y el tiempo, cometerá cada vez menos errores de codificación, pero lo que es más importante, se volverá más hábil para escribir las palabras clave correctas en los motores de búsqueda, lo que reducirá su tiempo de búsqueda de soluciones.
Como siempre, si tiene preguntas o sugerencias relacionadas con los temas tratados en este artículo, agréguelas como comentarios para que otros lectores puedan beneficiarse de la discusión.

Después, el artículo proviene de https://statsandr.com/blog/top-10-errors-in-r/, que traduje y edité un poco.

Cuenta pública @天桥下的买艺人: Quería escribir un artículo como este desde hace mucho tiempo. Vi que este artículo estaba bien escrito por extranjeros, así que lo moví aquí. Yo mismo modifiqué y agregué algo. Nosotros, chinos y extranjeros. Los métodos de entrada son diferentes, y también debe prestar atención a los errores causados ​​por diferentes símbolos como corchetes, comillas y dos puntos. Es una buena práctica cambiarlo al estado inglés cuando comience a escribir el código. Espero será útil para todos.

Supongo que te gusta

Origin blog.csdn.net/dege857/article/details/129744094
Recomendado
Clasificación