Я пишу программу в RStudio для расчета потенциала равновесия, и он только выводит Inf - PullRequest
1 голос
/ 27 марта 2020

Я пишу программу, которая автоматически вычисляет потенциал Нернста данного иона в клетке. Итак, я заставил пользователя указать, какой ион, его заряд и их концентрации внутри и снаружи ячейки. Я определил константы, написал уравнение в формате R, и все, что я продолжаю получать в качестве вывода, это Inf.

Поскольку я новичок в R, я почти уверен, что допустил ошибку где-то в своем коде. Итак, мне нужна ваша помощь, чтобы пересмотреть мой код и сказать, что я делаю неправильно.

readline("Which ion will you use to measure the potential equilibrium? = ")
z<-as.integer(readline("What is the ion charge? = "))
co<-as.integer(readline("¿What is the extracelular concentration of the ion (mM) = "))
ci<-as.integer(readline("¿What is the intracelular concentration of the ion (mM) = "))

#Defining constants

R<-8.3145 # unit J/K.mol
Tbody<-310.15 # K=Cº+273.15; Cº=37º body temperature
Faraday<-96485.337 # unit C/mol Faraday constant

#Equation
Veq<-((R*Tbody)/(z*Faraday))*log((co/ci), base = exp(1))  
Veq_mV<-Veq*1000 # from V to mV

#output
cat("The equilibrium potential for ",ion," is: ",Veq_mV)

Тип данных, которые я использую в качестве импута, - это строка для первого вопроса и целые числа для остальных. Он очень хорошо работает с другими ионами, такими как Na +, Cl-, K +, но с Ca2 + он выдает только Inf. Внешняя концентрация Ca2 + составляет от 0,0001 до 0,0007 или 0,1 мкМ / 0,7 мкМ. Есть ли способ это исправить?

1 Ответ

0 голосов
/ 27 марта 2020

Проблема в вашем коде вызвана приведением ваших входных данных к целым числам. Использование as.numeric вместо as.integer сохранит значения после любых десятичных знаков. as.integer будет отсекать десятичные дроби, поэтому концентрация Ca2 + 0,0001 будет интерпретироваться как 0 с as.integer и приведет к ошибке деления на 0, что приведет к выходу Inf.

Попробуйте это:

readline("Which ion will you use to measure the potential equilibrium? = ")
z<-as.numeric(readline("What is the ion charge? = "))
co<-as.numeric(readline("¿What is the extracelular concentration of the ion (mM) = "))
ci<-as.numeric(readline("¿What is the intracelular concentration of the ion (mM) = "))

#Defining constants

R<-8.3145 # unit J/K.mol
Tbody<-310.15 # K=Cº+273.15; Cº=37º body temperature
Faraday<-96485.337 # unit C/mol Faraday constant

#Equation
Veq<-((R*Tbody)/(z*Faraday))*log((co/ci), base = exp(1))  
Veq_mV<-Veq*1000 # from V to mV

#output
cat("The equilibrium potential for ",ion," is: ",Veq_mV)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...