R Scripting - Обновление значений DataFrame во время цикла - PullRequest
0 голосов
/ 25 февраля 2020

Я пытаюсь запустить al oop в R-сценарии на кадре данных, называемом input. и обновите имя столбца Действительный.

function myFunction(x){
    Result <- x * 2 
return(Result)
}

for (row in nrow(input)){
input$Valid[row] == myFunction(2)
}



output <- input 

Но обновление данных не обновляется. И да, я хочу сделать это в al oop.

Ответы [ 2 ]

2 голосов
/ 25 февраля 2020

В вашем for l oop есть несколько проблем:

  1. nrow(input) - это просто число, поэтому вам нужно создать диапазон от 1 до nrow(input), т. е. seq_len(nrow(input))
  2. == предназначен для оценки равенства, поэтому для присвоения значения используйте <- или =

Пример

for (row in seq_len(nrow(input))){
  input$Valid[row] <- myFunction(2)
}
0 голосов
/ 25 февраля 2020

Я смог заставить его работать с вашими предложениями:

Вот полный сценарий, который я использую: который использует запрос SOAP для проверки номеров НДС в ЕС с помощью http://ec.europa.eu/taxation_customs/vies/checkVatService.wsd

VatCheck <- function(x,z)
{
get_config_proxy <- function(url, user = NULL, pwd = NULL, verbose = FALSE, auth = "basic") {
  # curl::ie_get_proxy_for_url wants a scheme - either way it don't work
  if(is.null(httr::parse_url(url)$scheme)) {
    if (verbose)  message("No scheme provided. assume HTTP")
    url <- modify_url(url, scheme = "http")
  }
  # get the proxy url if needed
  proxy_url <- curl::ie_get_proxy_for_url(url)
  # return blank config if no proxy required
  if(is.null(proxy_url)) {
    if(verbose) message("No proxy")
    return(httr::config())
  }
  if(verbose) message("Proxy found")
  # Otherwise configure the proxy / user and password are needed

  # return a config object for use with httr
  proxy_config <- httr::use_proxy(url = proxy_url, auth = auth)
}
body = sprintf("<soapenv:Envelope xmlns:soapenv='http://schemas.xmlsoap.org/soap/envelope/' xmlns:urn='urn:ec.europa.eu:taxud:vies:services:checkVat:types'>  
   <soapenv:Body>
      <urn:checkVat xmlns='urn:ec.europa.eu:taxud:vies:services:checkVat:types'>
         <urn:countryCode>%s</urn:countryCode>
         <urn:vatNumber>%s</urn:vatNumber>
      </urn:checkVat>
   </soapenv:Body>
</soapenv:Envelope>",x,z)
url <- "http://ec.europa.eu/taxation_customs/vies/services/checkVatService"
# No proxy configured so we get a timeout from curl fetch
# req <- GET(url) 
# we configure the proxy giving interactively user and password
config_proxy <- get_config_proxy(url)
# we make a GET using the config
x <- with_config(config_proxy, POST(url, body=body))
req<-toString(content(x)) # we get 200. it works! 
req
 }



for(i in 1:nrow(input)) {
  input[i, "Valid"] <- VatCheck(x = toString(input[i, "Column1"])  , z= toString(input[i, "Colum2"]))   
}
output <- input 
...