В этом руководстве кратко изложены некоторые основные различия между R и Python. Он предназначен для того, чтобы помочь вам избежать некоторых потенциальных ловушек, если у вас есть опыт программирования на языке R. Хотя у обеих есть преимущества и недостатки, количество доступных библиотек для конкретной задачи является решающим фактором при выборе одной из них.

В Python индексация начинается с 0, поэтому первый элемент списка выбирается по 0-му индексу.

Python Input:
lst = ["A", "B", 3.45]
lst[0]
Out: 'A'

R:

R Input:
lst <- list("A","B", 3)

lst[1]

Output: "A"

В отличие от R, в Python исключается конечный индекс.

Python Input:
lst[0:1]
Out: ['A']
Python Input:
lst[0:2]
Out: ['A', 'B']

в R вы используете {} для определения области действия. В Python нет фигурных фигур, и вы используете отступы для определения области действия.

R:

R Input:
printString <- function(x,y) {
print("Hello!")  # indenting this line is not necessary
}

В Python, когда вы делаете отступ, вам нужно заканчивать строку выше двоеточием. Мы предлагаем вам использовать 4 пробела для отступа, но табуляция работает так же хорошо.

Python Input:
def printInput(name):
    if type(name) is str:
        print("String: Hello " + name + '!')
    elif type(name) is int or type(name) is float:
        print("Numeric: Hello " + str(name) + '!')
    else:
        print("We don't greet strangers!")

printInput("world")
printInput(123)
printInput(1.45)
printInput(None)
Out:
String: Hello world!
Numeric: Hello 123!
Numeric: Hello 1.45!
We don't greet strangers!

В Python переменные передаются в функции как object references. В R они передаются как значения.

Python использует статическую область видимости. То есть вы можете определить область действия переменной, просто взглянув на код. Кроме того, переменные внутри функции в Python являются локальными для этой функции и не могут быть доступны извне. Однако передать переменную функции в Python немного сложно. Когда вы передаете переменную функции, Python создает новую локальную ссылку, указывающую на эту переменную. По этой причине, если вы измените изменяемую переменную внутри функции Python (например, списка), она также изменится в основной функции. Это называется unintended aliasing, и если вы не обратите на это внимание, это может привести к трудно обнаруживаемым ошибкам. Вот пример.

Python Input:
x = [1, 2, 3]
def lst(x):
   x.append(4)
   return x
lst(x)
Out: [1, 2, 3, 4]
Python Input:
# Variable x globally changed too!
x
Out: [1, 2, 3, 4]

Если это не то, что вам нужно, вам нужно явно указать Python создать копию x и назвать ее y. Таким образом, обе переменные будут независимы друг от друга.

Python Input:
x = [1, 2, 3]
def lst2(x):
    y = list(x)  # create a copy of x and not a reference
    y.append(4)  # change the copy
    return y
lst2(x)
Out: [1, 2, 3, 4]
Python Input:
# Variable x is still [1, 2, 3]
x
Out: [1, 2, 3]

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

Python Input:
x = [1, 2, 3]
def lst3(x):
   x = [4, 5, 6]
   x.append(7)
   return x
lst3(x)
Out: [4, 5, 6, 7]
Python Input:
# Variable x is still [1, 2, 3]
x
Out: [1, 2, 3]

Задание — это не всегда то, что вы думаете.

Python Input:
a1 = [1,1]
a2 = [1,1]
# This simply creates a view: both a and b point to the 
# same location in the computer memory
b = a1
b[0] = 'boo!'
print(a1)
Out: ['boo!', 1]

Если вам нужна настоящая копия, выполните одно из следующих действий:

Python Input:
c = list(a2)
# OR
c = a2[:]
c
Out: [1, 1]

Как проверить, указывают ли две переменные на один и тот же адрес в памяти:

Python Input:
b is a1
Out: True
Python Input:
c is a2
Out: False

Сложный! Как проверить, имеют ли две переменные одинаковое значение:

Python Input:
c == a2
Out: True

Python делает это для эффективности использования памяти. Однако базовые типы будут работать нормально:

Python Input:
a = 1
b = a
b = 'boo!'
print(a)
Out: 1

В R для возведения в степень можно использовать символ вставки или двойную звездочку. В Python вы можете использовать только двойную звездочку, потому что ^ в Python является побитовым XOR.

Итак, вот 2323 (обратите внимание, как вы можете встроить код Latex в блокнот):

R:

Input: 2**3
Output: 8
Input: 2^3
Output: 8

Питон:

Python Input:
2**3
Out: 8
Python Input:
2^3
Out: 1

В R обычно можно использовать точку при именовании переменных и функций. В Python вы используете точку для доступа к методам и атрибутам классов и объектов. В Python вы не должны использовать точку при именовании чего-либо.

R:

my.integer.variable <- 5

Питон:

Python Input:
a = [1,2,3]
print(a)
a.append(4)
print(a)
Out:
[1, 2, 3]
[1, 2, 3, 4]

В R по умолчанию изменение формы данных происходит по столбцам. Поведение по умолчанию в Python — изменение формы по строкам. Это может вызвать незаметные ошибки, которые трудно отловить.

R:

R input:
matrix(0:9, nrow=2, ncol=5)
Out:
     [,1] [,2] [,3] [,4] [,5]
[1,]    0    2    4    6    8
[2,]    1    3    5    7    9

Питон:

Python Input:
import numpy as np
np.arange(10).reshape(2, 5)
Out:
array([[0, 1, 2, 3, 4],
       [5, 6, 7, 8, 9]])

Однако вы можете заставить Python выполнять изменение формы по столбцам, установив для параметра order значение 'F' внутри функции reshape.

Python Input:
import numpy as np
np.arange(10).reshape(2, 5, order='F')
Out:
array([[0, 2, 4, 6, 8],
       [1, 3, 5, 7, 9]])

Проверьте https://www.featureranking.com/tutorials/ для получения дополнительных руководств.